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