Compilerwarnung (Stufe 4) C4347

Verhaltensänderung: 'Funktionsvorlage' wird anstelle von 'Funktion' aufgerufen

Wenn in Visual Studio .NET eine Vorlagenfunktion sowie eine Funktion verwendet wurde, die keine Vorlage war, jedoch denselben Namen wie die Vorlagenfunktion hatte, wurde die Nicht-Vorlagenfunktion vom Compiler fälschlicherweise als Spezialisierung der Vorlagenfunktion behandelt.

Bei Code, der in allen Versionen von Visual C++ die gleiche Funktionsweise hat, fügen Sie oberhalb der Funktion, die keine Vorlage ist, template<> ein. Auf diese Weise wird sie zu einer echten expliziten Spezialisierung.

Diese Warnung ist standardmäßig deaktiviert. Weitere Informationen finden Sie unter Standardmäßig deaktivierte Compilerwarnungen.

Beispiel

Im folgenden Beispiel wird C4347 generiert.

// 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);
}