2

使用 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::Data 引用了 Data 类型的构造函数,所以你必须使用这个成语:

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

1 回答 1

-1

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

于 2012-09-22T08:44:48.973 回答