Поделиться через


Ошибка компилятора C2893

Не удалось специализировать шаблон функции "имя шаблона"

Замечания

Компилятор не смог специализировать шаблон функции. Причин сбоя может быть несколько.

Как правило, способ устранения ошибки C2893 заключается в проверке сигнатуры функции и убедитесь, что вы можете создать экземпляр каждого типа.

Пример

C2893 возникает из-за того, что fпараметр T шаблона выводится, std::map<int,int>но std::map<int,int> не имеет члена data_type (T::data_type не может быть создан экземпляр с помощью T = std::map<int,int>.). В следующем примере создается 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);
}