$10.2/4- "[ 注: たとえば、精巧な型指定子 (3.4.4) または基本指定子 (第 10 節) で名前を検索すると、すべての非型宣言が無視され、入れ子になった型指定子で名前が検索されます。 name-specifier (3.4.3) は、関数、変数、および列挙子の宣言を無視します。"
名前の検索について説明しているときに、このセクションでこのステートメントが非常に紛らわしいことがわかりました。
void S(){}
struct S{
S(){cout << 1;}
void f(){}
static const int x = 0;
};
int main(){
struct S *p = new struct ::S; // here ::S refers to type
p->::S::f();
S::x; // base specifier, ignores the function declaration 'S'
::S(); // nested name specifier, ignores the struct declaration 'S'.
delete p;
}
私の質問:
ルールに対する私の理解は正しいですか?
最後の行では、グローバル名前空間の関数を意味するのに対し、行では、
::S
新しい処理を自動的に struct を意味するのはなぜですか。S
::S
S
これはドキュメントのあいまいさを示しているのでしょうか、それとも C++ 標準ドキュメントから離れる日がまた来るのでしょうか?