Ошибка компилятора 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);
}