Compartilhar via


Erro do Compilador C2912

especialização explícita; 'declaration' não é uma especialização de um modelo de função

Você não pode especializar uma função que não seja de modelo.

A amostra a seguir gera C2912:

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

Este erro também será gerado como resultado do trabalho de conformidade do compilador que foi feito no Visual Studio .NET 2003: para cada especialização explícita, você deve escolher os parâmetros da especialização explícita, de forma que eles correspondam aos parâmetros do modelo primário.

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