使用 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