我有以下的cpp代码:
#include <iostream>
#include <limits>
// C2589 when compiling with specialization, fine when compiling without
template<typename T>
void foo(T value = std::numeric_limits<T>::infinity() )
{
}
// this specialization causes compiler error C2589 above
template<>
void foo<float>( float value )
{
}
int main()
{
foo<float>();
return 0;
}
当我尝试使用Visual Studio 2013编译它时,我会收到以下错误信息:
..\check2\main.cpp(5) : error C2589: '::' : illegal token on right side of '::'
..\check2\main.cpp(5) : error C2059: syntax error : '::'
如果我不包括特化的
foo<float>
,程序编译正常。在gcc 4.8.4下,包括特化后的代码也可以编译成功,这表明Visual C++编译器存在一些问题。这段代码是否正确并且应该编译?有没有Visual C++的解决方法?