C++の文法が複雑すぎて分からない
struct X { struct Y { struct Z { }; }; }; struct Y { struct Z { X foo(); }; }; struct Z { X::Y foo(); }; X::Y::Z foo(); X::Y::Z::foo() { return 0; }
最後の関数定義はいったいどの関数を定義しているのだろう…。C++の仕様書の生成規則だと
X::Y::Z (::foo)(); X::Y (::Z::foo)(); X (::Y::Z::foo)(); (X::Y::Z::foo)();
この4種類のツリーが生成できるように読めるし、どれか一つに制限しているような規則も見当たらない…。