template<typename T>
class C
{
void f() { }
};
/*template<typename T>
void C<T*>::f() { }*/
template<>
void C<int*>::f() { }
如果我们删除注释,代码将无法编译。我知道这一点(我也知道,我们应该有partial specialization
for C<T*>
),但我找不到标准的词,这解释了这种行为。我重读14 par
了几次标准。你能给我一个报价或标准的标准,这解释了这一点吗?
编辑。
template<typename T>
class C
{
template<typename U>
struct S { };
};
// #1
/*template<typename T>
class C<T*>
{
template<typename U>
struct S { };
};*/
// #2
/*template<typename T>
template<typename U>
struct C<T*>::S<U*> { };*/
template<>
template<typename U>
struct C<int*>::S<U*> { };
如果我们接下来只删除注释,那么 #2 - 代码将无法编译。