编译器警告(等级 1)C4347
更新:2007 年 11 月
错误消息
行为更改: 调用“function template”而不是“function”
在 Visual Studio .NET 中,如果已具有一个模板函数和一个与该模板函数同名的非模板函数,则编译器会错误地将该非模板函数视作模板函数的专用化。
为使代码在 Visual C++ 的所有版本中以相同方式工作,在非模板函数上添加 template<>,使其成为真正的显式专用化。
有关更多信息,请参见编译时的重大更改摘要。
默认情况下关闭此警告。有关更多信息,请参见默认情况下处于关闭状态的编译器警告。
示例
下面的示例生成 C4347。
// C4347.cpp
// compile with: /W4 /EHsc
#pragma warning (default : 4347)
template <typename T>
void f(T t) { T i = t; i = 0; }
void f(int i) { i++; }
// OK
template <typename T>
void f2(T t) { T i = t; i = 0; }
template <>
void f2(int i) { i++; }
int main() {
f(5); // regular function call
f<int>(5); // C4347 calls implicit instantiation
f2(5);
f2<int>(5);
}