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種類のツリーが生成できるように読めるし、どれか一つに制限しているような規則も見当たらない…。