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.
[Example 1: struct A { A(); };
struct B:public A { B(); };
A::A(){}
B::B(){}
B::A ba; // object of type A
A::A a; // error: A::A is not a type namestruct A::A a2; // object of type A — end example]
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.