Partager via


Erreur du compilateur C2912

Mise à jour : novembre 2007

Message d'erreur

spécialisation explicite ; 'déclaration' n'est pas une spécialisation d'un modèle de fonction
explicit specialization; 'declaration' is not a specialization of a function template

Vous ne pouvez pas spécialiser une fonction non basée sur des modèles.

L'exemple suivant génère l'erreur C2912 :

// C2912.cpp
// compile with: /c
void f(char);
template<> void f(char);   // C2912
template<class T> void f(T);   // OK

Cette erreur sera également générée suite à la mise en conformité du compilateur pour Visual Studio .NET 2003 : pour chaque spécialisation explicite, vous devez choisir les paramètres de la spécialisation explicite, de sorte qu'ils correspondent aux paramètres du modèle principal.

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

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