2015-01-12 1 views
3

많은 템플릿에서 클래스 템플릿의 경우 템플릿을 전문화 할 때 특수 멤버 템플릿을 포함하는 클래스도 명시 적으로 전문화되어야합니다. 표준에 관한 요점이 있으며 그러한 제한이있는 이유가 있습니까? 나는 두포 밑에서 의미한다.명시 적으로 전문화 된 멤버는 명시 적으로 특수화 된 클래스 템플릿을 포함해야합니다.

왜 허용되지 않습니까?

template <typename T> 
class A 
{ 
    template <typename U> 
    void foo() 
    {} 
}; 

template <typename T> 
template <> 
void A<T>::foo<int>() 
{} 
+0

보기 [CWG 727 (http://www.open-std.org/JTC1/SC22/WG21/docs/ cwg_active.html # 727) 및 [N4090] (http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2014/n4090.pdf) – dyp

답변

1

[temp.expl.spec]/16 : 클래스 템플릿의 부재 나 공간 범위에 나타나는 부재 템플릿 명백한 특성화 선언

, 부재 템플릿 및 일부 동봉 된 클래스 템플릿은 구체 템플릿 이 명시 적으로 특수화되지 않은 경우 명시 적으로 클래스 멤버 템플릿을 전문화하지 않아야한다는 점을 제외하고는 구체화되지 않고 으로 남아있을 수 있습니다. [ 예 :

template <class T1> class A { 
    template<class T2> class B { 
     template<class T3> void mf1(T3); 
     void mf2(); 
    }; 
}; 

template <> template <class X> 
class A<int>::B { 
    template <class T> void mf1(T); 
}; 

template <> template <> template<class T> 
void A<int>::B<double>::mf1(T t) { } 
template <class Y> template <> 
void A<Y>::B<double>::mf2() { } // ill-formed; B<double> is specialized 
           // but its enclosing class template A is not 

-단부 예]

관련 문제