Mar*_* Ba 5 c++ namespaces language-lawyer
该std命名空间是C++特殊,所以......
这是合法的C++吗?
// at global scope
namespace mine {
namespace std {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我称之为疯狂,但允许吗?
可以理解标准的参考(或非参考).
在reserved names标准17.4.3.1(及其子段落)中,我找不到任何禁止std用作嵌套命名空间名称的内容.它不是一个宏,它不在全局命名空间中,它似乎不符合任何禁止它的"外部链接标准".
它似乎是合法的(尽管你注意到这是非常不可取的).
标准std中使命名空间“特殊”的规则是 (§17.6.4.2.1 [namespace.std]/p1):
如果 C++ 程序向命名空间
std或命名空间内的命名空间 添加声明或定义,则它的行为是未定义的,std除非另有说明。
这仅适用于顶级命名空间。