为什么对重载函数的调用不明确

Why is this call to overloaded function ambiguous?

本文关键字:调用 不明确 函数 重载 为什么      更新时间:2023-10-16

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

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重载?

chris在对该问题的评论中指出,问题是我使用的是VS2010,它没有完全实现c++11标准。std::to_string仅实现long longunsigned long longlong double的过载。有关此事的更多详细信息,请参阅此相关问题。