Compartir a través de


Error del compilador C2893

No se pudo especializar la plantilla de función "template name"

El compilador no pudo especializar una plantilla de función. Este error puede deberse a muchas causas.

En general, la manera de resolver un error C2893 es revisar la signatura de la función y asegurarse de que puede crear una instancia de cada tipo.

Ejemplo

El error C2893 se produce porque el parámetro T de plantilla de f se deduce comostd::map<int,int>, pero std::map<int,int> no tiene ningún miembro data_type (no se puede crear una instancia de T::data_type con T = std::map<int,int>). El ejemplo siguiente genera el error C2893.

// C2893.cpp
// compile with: /c /EHsc
#include <map>
using namespace std;
class MyClass {};

template<class T>
inline typename T::data_type
// try the following line instead
// inline typename  T::mapped_type
f(T const& p1, MyClass const& p2);

template<class T>
void bar(T const& p1) {
    MyClass r;
    f(p1,r);   // C2893
}

int main() {
   map<int,int> m;
   bar(m);
}