我很确定我已经阅读了编译器无法在 SO 上的某个地方处理此代码的原因,但是,经过几个小时的搜索,我仍然找不到它。以下是相关代码:
#include <iostream>
template <typename T>
class base
{
};
class derived : base<derived::myStruct>
{
public:
struct myStruct
{
};
};
int main ()
{
return 0;
}
问题是解析器首先尝试base<derived::myStruct>
在 parsing 之前生成专业化derived
,因此,我收到此错误:“error C2065: 'myStruct' : undeclared identifier”。struct myStruct;
作为一个愚蠢的技巧,我注意到如果我在上面预先声明 VS2010 就会停止抱怨class derived
。在我看来,myStruct
应该绑定在里面derived
,这段代码应该抛出同样的错误:
#include <iostream>
template <typename T>
class base
{
};
struct myStruct;
class derived : base<derived::myStruct>
{
public:
struct myStruct
{
};
};
int main ()
{
return 0;
}
更新:gcc-4.5.1 能够抛出预期的错误,所以,我猜上面是 VS2010 中的一个错误......