Tom*_*Tom 5 c++ compiler-bug template-function
以下代码在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);
}
Run Code Online (Sandbox Code Playgroud)
Visual C++似乎忽略了通用模板函数,因为只MyFunc<float>使用了特化.无论如何,G ++解析了一般函数,并发现尚未定义CCodes枚举.
哪个是对的?或者是这个实现定义的?
GCC是正确的,除了MSVC之外的所有其他编译器都会做同样的事情.
这是一个主要的错误,实际上出现在一个MSVC未来路线图上.它处于"遥远的未来"范畴.他们将不得不重写他们的模板引擎来修复它.
有一种说法认为,错误形成的模板的诊断是可选的,因为它实际上是一个没有格式良好的实例化的模板,并且不需要标记这些模板.然而,