共用方式為


編譯器警告 (層級 4) 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);
}