次の名前空間定義は、最初の宣言がコメント アウトされているとコンパイルに失敗します。の最初の宣言foo
がコメント解除されている場合、問題なくコンパイルされます。
namespace Y
{
//void foo();
void ::Y::foo(){}
}
標準の関連部分 (§8.3¶1) は次のように述べています。
declarator-id が修飾されている場合、宣言は以前に宣言されたメンバーを参照するものとします
この規則により、他の名前空間への名前の導入が防止されることを理解しています。そのルールを緩和して、現在の名前空間を参照する修飾された idを許可できるかどうか疑問に思います。