12 Classes [class]

12.2 Class members [class.mem]

12.2.6 Nested type names [class.nested.type]

Type names obey exactly the same scope rules as other names. In particular, type names defined within a class definition cannot be used outside their class without qualification. [Example:

struct X {
  typedef int I;
  class Y { /* ... */ };
  I a;

I b;                            // error
Y c;                            // error
X::Y d;                         // OK
X::I e;                         // OK

end example]