Erreur du compilateur C2910
'function' : ne peut pas être explicitement spécialisé
Le compilateur a détecté une tentative de spécialisation explicite d’une fonction deux fois.
L’exemple suivant génère l’erreur C2910 :
// 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 peut également être généré si vous essayez de spécialiser explicitement un membre non-modèle. Autrement dit, vous ne pouvez spécialiser explicitement qu’un modèle de fonction.
L’exemple suivant génère l’erreur C2910 :
// 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){}
Cette erreur est également générée suite au travail de conformité du compilateur qui a été effectué dans Visual Studio .NET 2003 :.
Pour que le code soit valide dans les versions Visual Studio .NET 2003 et Visual Studio .NET de Visual C++, supprimez template <>
.
L’exemple suivant génère l’erreur C2910 :
// 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