Compilerfehler C2912
Aktualisiert: November 2007
Fehlermeldung
Explizite Spezialisierung; 'Deklaration' ist keine Spezialisierung einer Funktionsvorlage
explicit specialization; 'declaration' is not a specialization of a function template
Nicht auf Vorlagen basierende Funktionen können nicht spezialisiert werden.
Im folgenden Beispiel wird C2912 generiert:
// C2912.cpp
// compile with: /c
void f(char);
template<> void f(char); // C2912
template<class T> void f(T); // OK
Dieser Fehler kann auch aufgrund einer Verbesserung der Compilerkonformität in Visual Studio .NET 2003 ausgegeben werden: für jede explizite Spezialisierung müssen die Parameter der expliziten Spezialisierung ausgewählt werden, sodass diese mit den Parametern der primären Vorlage übereinstimmen.
Weitere Informationen finden Sie unter Übersicht über die wichtigsten Änderungen bei der Kompilierzeit.
// C2912b.cpp
class CF {
public:
template <class A> CF(const A& a) {} // primary template
// attempted explicit specialization
template <> CF(const char* p) {} // C2912
// try the following line instead
// template <> CF(const char& p) {}
};