代码就在这里。编译器是VC ++ 2012。
template<class T> // Normal class is okay. But template has the problem.
class A
{
const static unsigned N = 2; // not okay
// enum {N = 2}; // this is okay
template<unsigned i> void Fun() {}
template<> void Fun<N>() {} // error C2975 not constant expression
};
为什么呢?感谢。
答案 0 :(得分:2)
编译器可能提供了错误的错误消息,但代码格式错误,因为template<>
范围内的class {}
无效。这声明了一个显式的特化,它只能出现在命名空间范围内。
不幸的是,除了明确的类模板特化(不再是类模板)之外,你不能专门化一个类模板成员函数模板。
尝试使用重载和SFINAE。功能模板专业化通常是一个坏主意。
template<unsigned i> typename std::enable_if< i != N >::type Fun() {}
template<unsigned i> typename std::enable_if< i == N >::type Fun() {}