我在很多文章中读到,对于专门化成员模板时的类模板,包含专门化成员模板的类也应该显式专门化。在标准中有关于它的一点吗?有任何理由有这样的限制吗?我是说在引擎盖下。
为什么这是不允许的。
template <typename T>
class A
{
template <typename U>
void foo()
{}
};
template <typename T>
template <>
void A<T>::foo<int>()
{}发布于 2015-01-13 03:31:29
temp.expl.spec/16:
在出现在命名空间作用域中的类模板或成员模板的成员的显式专门化声明中,成员模板及其包含的一些类模板可以保持非专门化,除非如果没有显式专门化类成员模板的封闭类模板,则声明不应显式专门化该类成员模板。示例:
template class A{ template class B{ template void mf1(T3);void mf2();};};template <> template class A::B { template void mf1( t);};template <> template <> template void A::B::mf1(T T){} template <> void A::B::mf2() {} //格式不正确;B是专门化的//但它的封闭类模板A不是专门化的
-结束示例
https://stackoverflow.com/questions/27909185
复制相似问题