【发布时间】:2012-11-17 00:05:13
【问题描述】:
我很确定我已经阅读了编译器无法在 SO 上的某处处理此代码的原因,但是,经过几个小时的搜索,我仍然找不到它。以下是相关代码:
#include <iostream>
template <typename T>
class base
{
};
class derived : base<derived::myStruct>
{
public:
struct myStruct
{
};
};
int main ()
{
return 0;
}
问题是解析器在解析derived 之前首先尝试生成base<derived::myStruct> 特化,因此,我收到此错误:“错误C2065:'myStruct':未声明的标识符”。作为一个愚蠢的技巧,我注意到如果我在class derived 上方预先声明struct myStruct;,VS2010 就会停止抱怨。在我看来,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可以throw the expected error,所以,我猜上面是VS2010的一个bug...
【问题讨论】:
标签: c++ templates inheritance nested