首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内联命名空间和矛盾声明

内联命名空间和矛盾声明
EN

Stack Overflow用户
提问于 2014-12-02 15:02:14
回答 1查看 247关注 0票数 3

我想知道这是否被允许:

代码语言:javascript
复制
namespace A {
  inline namespace B {
    int a;
  }
  int a;
}

void foo() {
  A::a = 0; // clang 3.4 compiles, but gcc doesn't
}

标准说,

最后,通过显式限定(3.4.3.2)在封闭名称空间中查找名称,将包含由are指令引入的内联名称空间的成员,即使在封闭名称空间中有该名称的声明。

但我搞不懂。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-02 15:16:03

看起来这是一个pre clang 3.5虫,在这个八一二八六一上有两个缺陷报告。该决议是在861年提出的,并在3.4.3.2 namespace.qual中增加了以下内容:

对于名称空间X和名称m,命名空间限定查找集S(X,m)定义如下:让S'(X,m)是X中m的所有声明的集合,以及X的内联命名空间集(7.3.1 namespace.def)。如果S'(X,m)不是空的,则S(X,m)是S'(X,m);否则,S(X,m)是用X中的指令及其内联命名空间集命名的所有非内联命名空间Ni的S(X,m)的并。

以及其他相关补充:

如果S(X,m)是空集,则程序不正确.否则,如果S(X,m)正好有一个成员,或者如果引用的上下文是使用-声明(7.3.3 namespace.udecl),则S(X,m)是m. 的所需的声明集,否则如果m的使用不是允许从S(X,m)中选择唯一的声明,则程序是错误的。

看起来更改是在C++11前添加的,这段文字是在N3337中出现的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27252466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档