鉴于:
template<typename T> void f( T ) { } enum { // if changed to "enum E" it compiles e }; int main() { f( e ); // line 10 }
我得到:
foo.cpp: In function ‘int main()’: foo.cpp:10: error: no matching function for call to ‘f(<anonymous enum>)’
然而,如果枚举声明被赋予一个名称,那么它将被编译.为什么它不适用于匿名枚举?理想情况下,我希望将枚举值e提升为int并实例化f(int).
解决方法
未命名的类型根本不能用作模板参数
C 03在14.3.1 [temp.arg.type] / 2中说
A local type,a type with no linkage,an unnamed type or a type compounded from any of these types shall not be used as a template-argument for a template type-parameter.
此限制在C 0x中解除,您的程序在C 0x模式下不使用MSVC 2010和gcc 4.5.2进行编译.