次の方法で共有


コンパイラ エラー C2893

関数テンプレート 'template name' の特殊化に失敗しました

コンパイラは関数テンプレートを特殊化できませんでした。 このエラーには多くの原因が考えられます。

一般に、C2893 エラーを解決するには、関数のシグネチャを確認し、すべての型をインスタンス化できるようにします。

C2893が発生するのは、f のテンプレート パラメーター Tstd::map<int,int> であると推論されますが、std::map<int,int> にはメンバー data_type がありません (T::data_typeT = 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);
}