MSVC 2008不会编译以下代码:
template <class Derived>
struct B
{
typename Derived::type t;
};
struct D : B<D>
{
typedef int type;
};
void main()
{
D d;
}
我得到的错误是“错误C2039:'类型':不是'D'的成员”。有任何想法吗?
最佳答案
因为B需要D的完整类型定义才能被定义。
您可能期望的内容如下:
template <class Derived>
struct B
{
B() {
typename Derived::type t;
}
};
struct D : B<D>
{
typedef int type;
};
void main()
{
D d;
}
之所以可行,是因为在实例化D()(并因此实例化B())时,编译器具有类型的完整定义。