使用gcc 4.7编译以下C++ 11程序时:
extern int i;
int ::i;
int main()
{
}
Run Code Online (Sandbox Code Playgroud)
gcc抱怨说:
error: explicit qualification in declaration of `i`
Run Code Online (Sandbox Code Playgroud)
这是不符合要求的行为吗?标准中的哪个部分被视为格式错误?
8.3p1似乎表明应该允许:
如果限定符是global :: scope解析运算符,则declarator-id引用在全局命名空间作用域中声明的名称.
更新:
从N3485 8.3p1:
声明符列表出现在可选(第7节)decl-specifier-seq(7.1)之后.每个声明符只包含一个declarator-id; 它命名声明的标识符.除了声明某些特殊函数(12.3,12.4,13.5)以及声明模板特化或部分特化(14.7)之外,声明符中出现的非限定id应该是一个简单的标识符.当declarator-id被限定时,声明应引用先前声明的限定符所引用的类或命名空间的成员(或者,在命名空间的情况下,引用该命名空间的内联命名空间集的元素)(7.3 .1))或其专业化; 该成员不仅仅是由声明者id的嵌套名称说明符所指定的类或命名空间范围内的using声明引入的.限定的声明符id的嵌套名称说明符不应以decltype-specifier开头.[注意:如果限定符是global :: scope解析运算符,则declarator-id引用在全局命名空间范围内声明的名称. - 结束注释]声明符id后面的可选attribute-specifier-seq附加到声明的实体.
jro*_*rok 12
下一句话说(在n3337):
甲声明符-ID不得合格音响ED除了一个成员函数或其类外的静态数据成员,其命名空间的外面去音响nition或显式实例命名空间的函数或变量的部件构成,或显式的去连接nition的去连接nition在其命名空间之外的特化,或者是另一个类或命名空间的成员的友元函数的声明.
在例外中没有提到全局变量的定义.
| 归档时间: |
|
| 查看次数: |
1758 次 |
| 最近记录: |