C++ 基说明符中的全局限定
作为后续,我希望编译以下C++0x代码:C++ 基说明符中的全局限定,c++,c++11,C++,C++11,作为后续,我希望编译以下C++0x代码: struct x {}; struct :::x {} y {}; 然而,GCC 4.7.0 20110731告诉我: 错误:“:”标记之前的类名全局限定无效 当我向理智后退一步,给第二个UDT起个名字: struct x {}; struct a:::x {} y{}; // remember, identical to `a::: x` or `a: ::x` or `a:: :x` etc 错误是: 错误:“a”尚未声明 看起来这三个冒号的词法
struct x {};
struct :::x {} y {};
然而,GCC 4.7.0 20110731告诉我:
错误:“:”标记之前的类名全局限定无效
当我向理智后退一步,给第二个UDT起个名字:
struct x {};
struct a:::x {} y{}; // remember, identical to `a::: x` or `a: ::x` or `a:: :x` etc
错误是:
错误:“a”尚未声明
看起来这三个冒号的词法是相似的,而不是,但这能从[最终草案]标准中明确推断出来吗
这个问题可能与此有关吗
看起来这三个冒号的词法相当复杂
但这能从[最终草案]中明确推断出来吗
标准
这不再是[最终]草案了。已经是这样了。是的,可以推断:::将被解析为::后跟:。这纯粹是一个词汇问题。在C++03中,令牌被视为最长的令牌。在C++03中,将led模板关闭>>视为移位运算符。在C++0x中,这种特殊情况有例外,但一般规则仍然适用,请参见2.5.3。例如,+++将被解析为++后跟+,反之亦然
看起来这三个冒号的词法相当复杂
但这能从[最终草案]中明确推断出来吗
标准
这不再是[最终]草案了。已经是这样了。是的,可以推断:::将被解析为::后跟:。这纯粹是一个词汇问题。在C++03中,令牌被视为最长的令牌。在C++03中,将led模板关闭>>视为移位运算符。在C++0x中,这种特殊情况有例外,但一般规则仍然适用,请参见2.5.3。例如,+++将被解析为++后跟+,反之亦然,这只是解析。从§2.5.3开始 如果输入流已被解析为预处理标记(最多可达给定字符),则下一个预处理标记是可能构成预处理标记的最长字符序列,即使这会导致进一步的词法分析失败 基本上,它必须使用最长的字符序列,因此:::总是被解析为:::就像x+++y总是被解析为x+++y一样
这称为解析。这只是解析。从§2.5.3开始 如果输入流已被解析为预处理标记(最多可达给定字符),则下一个预处理标记是可能构成预处理标记的最长字符序列,即使这会导致进一步的词法分析失败 基本上,它必须使用最长的字符序列,因此:::总是被解析为:::就像x+++y总是被解析为x+++y一样
这被称为解析。在发布之前,我们仅有的文档是最终草案。定稿已被一致接受,但这并不妨碍它成为定稿在出版之前,我们仅有的文件是最终草案。定稿已被一致接受,但这并不妨碍它成为定稿真的,这让你晚上睡不着吗-真的,这让你晚上睡不着吗-