ドラフト §7.3.1¶1 (n4527) では、名前空間定義の文法には以下が含まれます。
囲み名前空間指定子:
識別子
囲み名前空間指定子 :: 識別子
これにより、名前空間の定義が「::」で始まる識別子を持つことができなくなります
namespace d{ namespace e {} }
namespace ::d::e
{
void foo(){}
}
その制限には何か理由がありますか?
更新: 反対票といくつかの回答により、最初の文で「ドラフト」を意味するときに「標準」と書いたことに気づきました。私の弁護では、括弧内に文書番号を書きました。したがって、これは C++1z のネストされた名前空間定義機能に関する質問であることを強調しておきます。