>>603
ものすごい微妙な動きをするみたいだ・・・。
struct Base の定義を見てみると、外側に既に struct Data が定義されていても、
なぜか、Data は、「nested Data」すなわち、Baseの内部クラスの方を「参照」して
しまうらしい。規則性はどこにあるんだろう。まだ英文読んでないけど。

struct Node {
struct Node* Next; // OK: Refers to Node at global scope
struct Data* Data; // OK: Declares type Data
// at global scope and member Data
};

struct Data {
struct Node* Node; // OK: Refers to Node at global scope
friend struct ::Glob; // error: Glob is not declared, cannot introduce a qualified type ([dcl.type.elab])
friend struct Glob; // OK: Refers to (as yet) undeclared Glob at global scope.
/* ... */
};

struct Base {
struct Data; // OK: Declares nested Data
struct ::Data* thatData; // OK: Refers to ::Data
struct Base::Data* thisData; // OK: Refers to nested Data
friend class ::Data; // OK: global Data is a friend
friend class Data; // OK: nested Data is a friend
struct Data { /* ... */ }; // Defines nested Data
};