Errore del compilatore C2912
la specializzazione esplicita 'declaration' non è una specializzazione di un modello di funzione.
Non è possibile specializzare una funzione non modello.
L'esempio seguente genera l'errore C2912:
// C2912.cpp
// compile with: /c
void f(char);
template<> void f(char); // C2912
template<class T> void f(T); // OK
Questo errore verrà generato anche in seguito alle operazioni di conformità del compilatore eseguite in Visual Studio .NET 2003: è necessario scegliere i parametri di ogni specializzazione esplicita in modo che corrispondano ai parametri del modello principale.
// 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) {}
};