Delen via


Compilerfout C2893

Kan functiesjabloon 'sjabloonnaam' niet specialiseren

Opmerkingen

De compiler is niet gespecialiseerd in een functiesjabloon. Er kunnen veel oorzaken zijn voor deze fout.

Over het algemeen is het oplossen van een C2893-fout het controleren van de handtekening van de functie en ervoor te zorgen dat u elk type kunt instantiëren.

Example

C2893 treedt op omdat de sjabloonparameter f wordt afgeleid als std::map<int,int>, maar std::map<int,int> geen lid data_type heeft (T::data_type kan niet worden geïnstantieerd met T = std::map<int,int>). In het volgende voorbeeld wordt C2893 gegenereerd.

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