为什么这个调用重载函数的模糊不清?

时间:2012-09-08 23:18:01

标签: c++ templates overloading

我是模板编程的初学者,我正在使用以下模板函数来避免代码重复:

template <class T>
void foo(T iInteger) {

    // ... same algorithm for all integer types

    std::to_string( static_cast<T>(iInteger) ); // C2668: ambiguous call to overloaded function

    // ... end of algorithm

}

我的foo函数只能用原始整数类型调用。 我天真地认为static_cast足以告诉编译器要使用std::to_string()的哪个重载,但这似乎还不够,因为我仍然得到C2668: ambiguous call to overloaded function。我错过了什么?是否可以避免为所有原始整数类型重复相同的代码,同时仍然调用适当的std::to_string重载?

1 个答案:

答案 0 :(得分:2)

正如克里斯在对问题的评论中指出的那样,问题是我使用的是VS2010,它没有完全实现c ++ 11标准。 std::to_string仅实现long longunsigned long longlong double的重载。有关此事的详细信息,请参阅this相关问题。