Compartilhar via


Erro do compilador C2893

Falha ao especializar o modelo de função 'template name'

O compilador falhou ao especializar um modelo de função. Pode haver muitas causas para esse erro.

Em geral, a maneira de resolver um erro C2893 é revisar a assinatura da função e certificar-se de que você pode instanciar todos os tipos.

Exemplo

O erro C2893 ocorre porque o parâmetro T do modelo de f é deduzido como sendo std::map<int,int>, mas std::map<int,int> não tem um membro data_type (T::data_type não pode ser instanciado com T = std::map<int,int>.). O exemplo a seguir gera o erro 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);
}