Compartir a través de


Error del compilador C2912

Actualización: noviembre 2007

Mensaje de error

especialización explícita; 'declaración' no es una especialización de una plantilla de función
explicit specialization; 'declaration' is not a specialization of a function template

No se puede especializar una función que no es de plantilla.

El ejemplo siguiente genera el error C2912:

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

Este error también se producirá como resultado del trabajo de conformidad del compilador realizada para Visual Studio .NET 2003: se deben elegir los parámetros para cada especialización explícita de forma que coincidan con los parámetros de la plantilla principal.

Para obtener más información, vea Resumen de cambios importantes en tiempo de compilación.

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