【发布时间】:2014-01-03 20:44:39
【问题描述】:
template<typename T>
void f(const T &v = T());
template<>
void f<std::string>(const std::string &v)
{
std::cout << v;
}
int main(int argc, char* argv[])
{
f<std::string>(); // Error in VS2013, OK in VS2012, gcc-4.7
f<std::string>("Test"); // OK
f<std::string>(std::string()); //OK
return 0;
}
最新的 Visual Studio 2013 编译器在必须使用默认参数的情况下给出以下编译器错误:
error C2440: 'default argument' : cannot convert from 'const std::string *' to 'const std::string &'
Reason: cannot convert from 'const std::string *' to 'const std::string'
No constructor could take the source type, or constructor overload resolution was ambiguous
Visual Studio 2012 和 gcc-4.7 编译良好。
更新:由于它似乎是一个 VS2013 错误,是否有任何临时解决方法不需要重大代码更改,直到由 MS 修复?错误报告已在 MS connect 上提交。
【问题讨论】:
-
VS2013 拒绝这个是错误的。但是你的问题是什么?或者这只是一个咆哮?
-
注意:
std::cout << v;在 VS2012 中抛出错误:必须是std::cout << v.c_str();
标签: c++ templates visual-c++ visual-studio-2013