这个类似的倒霉问题在被关闭之前得到了评论和简短的答案,内容为:“因为这是语言的定义”。在这里,我要求提供C++标准内部的证据证明它是如此定义的。
无论是gcc 4.8.1还是clang 3.3,在默认诊断选项或更严格的情况下,都会对额外的限定符或显式限定符的代码产生错误,例如:
自gcc v4.1以来,已经对这些错误进行了诊断。但是流行的编译器在这些错误方面并不完全一致。MSVC++ 2012(Nov CTP)在
无论是gcc 4.8.1还是clang 3.3,在默认诊断选项或更严格的情况下,都会对额外的限定符或显式限定符的代码产生错误,例如:
struct x
{
int x::i; // Error: gcc/clang: "extra"
};
int ::y; // Error: gcc: "explicit", clang: "extra"
自gcc v4.1以来,已经对这些错误进行了诊断。但是流行的编译器在这些错误方面并不完全一致。MSVC++ 2012(Nov CTP)在
int ::y;
处报错,但即使使用/Wall
,也不会在int x::i;
上发出诊断——这就是那个不幸的提问者所提出的问题类型——这种差异表明了MS编译器编写者的故意考虑。
如果这些错误被标准所允许,那么它们是如何被允许的?引用C++11标准即可。
一个答案可能是“它们来源于语法”。在这种情况下,请尝试展示它们如何源自语法,并随意使用标准的语法分类。我拥有一份副本,将重新阅读以理解解释。