Compilerfehler C2910
Aktualisiert: November 2007
Fehlermeldung
'Funktion': Kann nicht explizit spezialisiert werden
'function' : cannot be explicitly specialized
Der Compiler hat festgestellt, das zweimal versucht wurde, dieselbe Funktion explizit zu spezialisieren.
Im folgenden Beispiel wird C2910 generiert:
// C2910.cpp
// compile with: /c
template <class T>
struct S;
template <> struct S<int> { void f() {} };
template <> void S<int>::f() {} // C2910 delete this specialization
C2910 kann auch beim Versuch ausgegeben werden, einen Nicht-Vorlagenmember explizit zu spezialisieren. Folglich können ausschließlich Funktionsvorlagen explizit spezialisiert werden.
Im folgenden Beispiel wird C2910 generiert:
// C2910b.cpp
// compile with: /c
template <class T> struct A {
A(T* p);
};
template <> struct A<void> {
A(void* p);
};
template <class T>
inline A<T>::A(T* p) {}
template <> A<void>::A(void* p){} // C2910
// try the following line instead
// A<void>::A(void* p){}
Dieser Fehler kann auch aufgrund einer Verbesserung der Compilerkonformität in Visual Studio .NET 2003 ausgegeben werden:
In Code, der sowohl in der Visual Studio .NET 2003-Version als auch in der Visual Studio .NET-Version von Visual C++ gültig sein soll, entfernen Sie template <>.
Weitere Informationen finden Sie unter Übersicht über die wichtigsten Änderungen bei der Kompilierzeit.
Im folgenden Beispiel wird C2910 generiert:
// C2910c.cpp
// compile with: /c
template <class T> class A {
void f();
};
template <> class A<int> {
void f();
};
template <> void A<int>::f() {} // C2910
// try the following line instead
// void A<int>::f(){} // OK