在草案§7.3.1¶1 (n4527)中,命名空间定义的语法包含以下内容:
这阻止了命名空间定义具有以“::”开头的标识符。enclosing-namespace-specifier:
identifier
enclosing-namespace-specifier :: identifier
namespace d{ namespace e {} }
namespace ::d::e
{
void foo(){}
}
那个限制有什么原因吗?
更新: 投票和一些回答让我意识到我在第一句话中写错了“标准”,实际上是“草案”。为此,我在括号中写出了文件编号。因此,我强调这是关于C++1z嵌套命名空间定义功能的问题。
::
表示全局命名空间。所以命名空间foo {namespace ::bar{}}
要么必须停止将::
视为全局,要么将bar提升到foo之外,这会很奇怪... 更好的方法是禁止这种写法。 - IdeaHat