コンパイラの警告 (レベル 4) C4347

更新 : 2007 年 11 月

エラー メッセージ

動作変更 : 'function template' が 'function' の代わりに呼び出されました。

Visual Studio .NET で、テンプレート関数と、そのテンプレート関数と同じ名前の非テンプレート関数がある場合に、コンパイラが非テンプレート関数を間違ってテンプレート関数の特殊な形式として扱いました。

すべてのバージョンの Visual C++ で同じ動作をするコードを作成するには、template<> を非テンプレート関数の上に追加し、実際の明示的な特殊化にします。

詳細については、「Summary of Compile-Time Breaking Changes」を参照してください。

既定では、この警告はオフに設定されています。詳細については、「Compiler Warnings That Are Off by Default」を参照してください。

使用例

次の例では 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);
}