声明嵌套命名空间`std`是合法的C ++吗?

时间:2014-08-06 20:37:07

标签: c++ namespaces language-lawyer

std命名空间在C ++中很特殊,所以......

这是合法的C ++吗?

// at global scope
namespace mine {
  namespace std {
    ...
  }
}

我称之为疯了,但是允许吗?

赞赏标准的参考(或非参考)。

2 个答案:

答案 0 :(得分:7)

reserved names标准17.4.3.1(及其子段落)中,我找不到任何禁止使用std作为嵌套命名空间名称的内容。它不是一个宏,它不在全局命名空间中,它似乎不符合任何禁止它的“外部链接标准”。

这似乎是合法的(尽管你注意到这是非常不可取的)。

答案 1 :(得分:4)

使std命名空间“特殊”的标准中的规则是(§17.6.4.2.1[namespace.std] / p1):

  

如果添加声明或者C ++程序的行为是未定义的   命名空间std或命名空间内的命名空间的定义   除非另有说明,否则std

这仅适用于顶级命名空间。