以下代码在 Visual C++ 2013 中编译,但不在 G++ 4.8.2 下:
template<class T>
int MyFunc(T& t)
{
return static_cast<int>(CCodes::blah);
}
template<>
int MyFunc(float& t)
{
return 0;
}
int main() {
float f = 10.f;
return MyFunc(f);
}
Visual C++ 似乎忽略了通用模板函数,因为只MyFunc<float>
使用了特化。G++ 无论如何都会解析通用函数,并发现尚未定义 CCodes 枚举。
哪个是对的?还是这个实现定义的?