For example, the constructor
is not an acceptable lookup result in an
elaborated-type-specifier so the constructor would not be
used in place of the injected-class-name.
—end note
]
Such a constructor
name shall be used only in the declarator-id of a declaration
that names a constructor or in a using-declaration.
struct A { A(); };
struct B: public A { B(); };
A::A() { }
B::B() { }
B::A ba; // object of type AA::A a; // error, A::A is not a type name
struct A::A a2; // object of type A
A class member name hidden by a name in a nested declarative region or
by the name of a derived class member can still be found if qualified by
the name of its class followed by the :: operator.