c – 没有匹配的函数调用

前端之家收集整理的这篇文章主要介绍了c – 没有匹配的函数调用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
鉴于:
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进行编译.

猜你在找的C&C++相关文章