这个类似的命运多舛的问题 在关闭之前得到了评论和简短的回答,大意是:因为这就是语言的定义方式。在这里,我要求在 C++ 标准中提供如此定义的证据。
gcc 4.8.1 和 clang 3.3 类似,具有默认诊断选项或更严格,会为代码的额外限定或显式限定给出错误,例如:
struct x
{
int x::i; // Error: gcc/clang: "extra"
};
int ::y; // Error: gcc: "explicit", clang: "extra"
自 v4.1 以来,gcc 已诊断出此类错误。但流行的编译器对这些错误并不一致。MSVC++ 2012(11 月 CTP)给出了一个错误,int ::y;
但即使有/Wall
,也没有给出任何诊断
int x::i;
- 命运多舛的提问者提出的那种情况 - 并且这种差异表明 MS 编译器作者深思熟虑。
标准如何保证这些错误(如果是)?对 C++11 标准的引用就足够了。
答案可能是“他们遵循语法”。在这种情况下,请尝试展示它们如何遵循语法并随意使用标准的语法分类。我有一份副本,将重新阅读以理解解释。