作为" 什么是这个疯狂的C++ 11语法==> struct:bar {} foo {};? "的后续内容,我希望编译以下C++ 0x代码:
struct x {};
struct :::x {} y {};
Run Code Online (Sandbox Code Playgroud)
但是,GCC 4.7.0 20110731告诉我:
错误:在':'标记之前,类名的全局限定无效
当我退一步走向理智并为第二个UDT命名时:
struct x {};
struct a:::x {} y{}; // remember, identical to `a::: x` or `a: ::x` or `a:: :x` etc
Run Code Online (Sandbox Code Playgroud)
错误是:
错误:'a'尚未声明
看起来这三个冒号是被贬低<::> <:>而不是<:> <::>,但是这可以从[最终草案]标准中明确推断出来吗?
也许问题" 班级宣言班级的全球资格 "是否相关?
这与解析有关.来自§2.5.3
如果输入流已被解析为预处理令牌直到给定字符,则下一个预处理令牌是可构成预处理令牌的最长字符序列,即使这会导致进一步的词法分析失败.
基本上,它必须采用最长的字符序列,因此:::始终按照始终解析为:: :的相同方式x+++y进行解析x ++ + y.
这被称为Maximal Munch解析.
| 归档时间: |
|
| 查看次数: |
478 次 |
| 最近记录: |