6 Basic concepts [basic]

6.4 Name lookup [basic.lookup]

6.4.3 Qualified name lookup [basic.lookup.qual]

6.4.3.1 Class members [class.qual]

Если nested-name-specifierиз a qualified-id назначает класс, имя, указанное после, nested-name-specifierищется в области действия class ([class.member.lookup]), за исключением случаев, перечисленных ниже. Имя должно представлять один или несколько членов этого класса или одного из его базовых классов (пункт [class.derived]). [К Note: члену класса можно обратиться с помощью a qualified-idв любой точке его потенциальной области видимости ([basic.scope.class]). ] Исключения из приведенного выше правила поиска имен следующие: end note

В поиске, в котором имена функций не игнорируются,34 а nested-name-specifierкласс назначает C:

вместо этого считается, что имя является именем конструктора класса C. [ Note: Например, конструктор не является приемлемым результатом поиска, elaborated-type-specifierпоэтому конструктор не будет использоваться вместо введенного имени класса. ] Такое имя конструктора должно использоваться только в объявлении, которое называет конструктор, или в . [ end notedeclarator-idusing-declarationExample:

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 name
struct A::A a2;     // object of type A

end example]

Имя члена класса, скрытое именем во вложенной декларативной области или именем члена производного класса, все еще можно найти, если оно уточняется именем его класса, за которым следует ​::​ оператор.

Поисковые запросы, в которых имена функций игнорируются, включают имена, содержащиеся в a nested-name-specifier, an elaborated-type-specifierили a base-specifier.