std
命名空间在C ++中很特殊,所以......
这是合法的C ++吗?
// at global scope
namespace mine {
namespace std {
...
}
}
我称之为疯了,但是允许吗?
赞赏标准的参考(或非参考)。
答案 0 :(得分:7)
在reserved names
标准17.4.3.1(及其子段落)中,我找不到任何禁止使用std
作为嵌套命名空间名称的内容。它不是一个宏,它不在全局命名空间中,它似乎不符合任何禁止它的“外部链接标准”。
这似乎是合法的(尽管你注意到这是非常不可取的)。
答案 1 :(得分:4)
使std
命名空间“特殊”的标准中的规则是(§17.6.4.2.1[namespace.std] / p1):
如果添加声明或者C ++程序的行为是未定义的 命名空间
std
或命名空间内的命名空间的定义 除非另有说明,否则std
。
这仅适用于顶级命名空间。