基本说明符中的全局限定
Global qualification in base specifier
作为"这是什么疯狂的c++ 11语法==>Struct: bar {} foo {};?,我希望编译以下c++ 0x代码:
struct x {};
struct :::x {} y {};
但是GCC 4.7.0 20110731告诉我:
错误:类名的全局限定在':' token之前无效
当我回过头来为第二个UDT命名时:
struct x {};
struct a:::x {} y{}; // remember, identical to `a::: x` or `a: ::x` or `a:: :x` etc
错误是:
错误:'a'未被声明
似乎三个冒号被命名为<::> <:>
而不是<:> <::>
,但是这可以从[最终草案]标准中清楚地推断出来吗?
和"类声明类头中的全局限定"这个问题是否相关?
这只是为了解析。从§2.5.3
如果输入流已被解析为预处理令牌,直至给定字符,则下一个预处理令牌是可以构成预处理令牌的最长字符序列,即使这将导致进一步的词法分析失败。
基本上,它必须采用最长的字符序列,因此:::
总是被解析为::
:
,就像x+++y
总是被解析为x
++
+
y
一样。
这被称为maximum Munch解析
看起来这三个冒号像<::> <:>一样被简化了然后<:> <::>,但这能从[最终草案]中清楚地推断出来吗?标准吗?
它不再是[最终]草稿了。它已经被一致接受了。是的,可以推断:::
将被解析为::
,然后是:
。这纯粹是一个词汇问题。与c++ 03一样,该令牌被视为最长的令牌。在c++ 03中,这导致模板关闭>>
被视为移位操作符。在c++ 0x中,对于这种特殊情况有一个例外,但是一般规则仍然适用(参见2.5.3)。例如,++将被解析为++后面跟着+,而不是相反
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- 激励'inline'说明符的真实世界示例?
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何创建一个空的全局类并在启动时实例化它
- 缺少类型说明符,显式类型为"缺少错误"
- 内联函数中具有内部链接的全局变量
- 为什么虚函数不能是静态的和全局的?
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 为什么mpfr_printf与十六进制浮点(%a转换说明符)的printf不同
- 叮叮当当在修复时插入多个"覆盖"说明符
- 全局作用域中函数指针的赋值
- g++用户定义的动态链接库上的全局new和delete运算符
- 在命名空间中使用全局命名空间中的函数
- 全局变量 多读取器 一个写入器多线程安全?
- 类的全局对象和静态成员
- 全局变量的循环依赖性与外部说明符
- 函数名解析不正确的全局命名空间说明符
- 基本说明符中的全局限定