Partager via


Erreur du compilateur C2910

Mise à jour : novembre 2007

Message d'erreur

'fonction' : ne peut pas être explicitement spécialisé
'function' : cannot be explicitly specialized

Le compilateur a détecté une tentative de spécialisation explicite d'une fonction à deux reprises.

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 tentez de spécialiser explicitement un membre qui n'est pas un modèle. C'est-à-dire que vous pouvez uniquement spécialiser explicitement 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 sera également générée suite à la mise en conformité du compilateur pour Visual Studio .NET 2003.

Pour produire un code valide dans les versions Visual Studio .NET 2003 et Visual Studio .NET de Visual C++, supprimez template <>.

Pour plus d'informations, consultez Récapitulatif des modifications sans rupture au moment de la compilation.

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