Compilerwarnung (Stufe 4) C4347

Aktualisiert: November 2007

Fehlermeldung

Verhaltensänderung: 'Funktionsvorlage' wird anstelle von 'Funktion' aufgerufen
behavior change: 'function template' is called instead of 'function'

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.

Weitere Informationen finden Sie unter Übersicht über die wichtigsten Änderungen bei der Kompilierzeit.

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