【发布时间】:2013-08-03 09:18:49
【问题描述】:
This similar ill-fated question 在关闭之前得到了 cmets 和简短的答案,大意是:因为那是 语言是如何定义的。在这里,我要求提供证据 如此定义的 C++ 标准。
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(十一月 CTP)
在int ::y; 处出现错误,但即使使用/Wall,也根本不提供诊断
int x::i; - 命运多舛的提问者提出的那种情况 -
并且这种差异表明 MS 编译器作者深思熟虑。
如果存在这些错误,标准如何保证?对 C++11 的引用 标准就足够了。
答案可能是“它们遵循语法”。在这种情况下, 请尝试展示它们如何遵循语法并随意使用 标准的语法分类。我有一份副本,我会重新阅读 理解解释。
【问题讨论】:
-
我相信this 是骗子。这是非法的(根据我在欺骗中的回答中的引用),但在 C++1y 中是允许的(参见 litb 回答中的链接)。
-
我同意我欺骗了链接的Q,它非常有帮助。
-
@jrok 这是一个不同的问题。此问题中显示的内容在 C++14 中仍然无效。
标签: c++ c++11 compiler-errors standards qualified-name