template <typename T>
struct A
{
template <typename U>
struct B;
template <>
struct B<int> {static const int tag = 1;}; // Works fine in VS2010
};
어떻게 같은 방법으로 B를 전문으로 할 수 있지만, A. 외부 I없이 성공이 시도 : 내가 얻을전문화
template <typename T> template <>
struct A<T>::B<int> {static const int tag = 1;};
:
error C3212: 'A<T>::B<int>' : an explicit specialization of a template member must be a member of an explicit specialization
그것은 클래스의 내부를 정의하여 내가 정확히 할 수 있기 때문에 이해가되지 않습니다
VS2010 문제가 있습니까? 잘못된 구문입니까?
감사
PS :이 하나 (어쨌든 잘못한다, 충돌 VS2010) :
template <> template <typename T>
struct A<T>::B<int> {static const int tag = 1;};
감사합니다. 왜 예외인가? 개념적으로 허용하는 것이 허용 가능할 것입니다. – Frigg
@ Frigg- 만약 내가 추측해야한다면 내부 템플리트를 사용하여 외부 특수화를 수행하는 것과 내부 특성화 된 외부 템플릿이지만, 나는 전혀 모른다. 나는 당신이 질문을 게시 할 때까지 이것이 불법이라는 것을 몰랐습니다. :-) – templatetypedef
내 마음에, 이것은 매우 모호하지 않습니다. 나는 그들을 위해 예외를 추가하는 것을 상상하는 것이 힘들다. 어떤 예외도 문제를 일으키고, (당신이 나에게 묻는다면)이 경우가 아닌 것보다 더 많은 모호함이 있습니다. :( – Frigg