Visual Studio 2010 的模板问题

Template trouble with Visual Studio 2010

本文关键字:问题 Studio 2010 Visual      更新时间:2023-10-16

在Linux中使用GCC,下面的代码编译得很好。但是对于Visual Studio,会发生错误C2893。你有什么想法吗?

struct A
{
};
struct B
{
    typedef A Data;
};
struct C
{
    typedef B Data;
};
template<typename Type>
typename Type::Data::Data  test( Type in)
{
    return Type::Data::Data();
}
int main(){
    C c;
    C::Data::Data a;//works
    test(c);//error C2893: The specialization of the function template 'Type :: Data :: {ctor} test (Type)' failed
}

多谢

Avakar的解决方案:因为Data::D ata指的是Data类型的构造函数,所以你必须使用这个习惯用法:

typename identity<typename Type::Data>::type::Data

编译器无法专用化函数模板。此错误可能有多种原因。通常,解决 C2893 错误的方法是查看函数的签名并确保可以实例化每种类型。