Если nested-name-specifierиз a qualified-id назначает класс, имя, указанное после, nested-name-specifierищется в области действия class ([class.member.lookup]), за исключением случаев, перечисленных ниже. Имя должно представлять один или несколько членов этого класса или одного из его базовых классов (пункт [class.derived]). [К Note: члену класса можно обратиться с помощью a qualified-idв любой точке его потенциальной области видимости ([basic.scope.class]). ] Исключения из приведенного выше правила поиска имен следующие: — end note
поиск деструктора такой, как указано в [basic.lookup.qual];
a conversion-type-idиз a conversion-function-idищется таким же образом, как и conversion-type-idв доступе к члену класса (см. [basic.lookup.classref]);
имена в a template-argumentиз a template-idищутся в контексте, в котором postfix-expressionпроисходит целое .
поиск имени, указанного в a, using-declarationтакже находит имена классов или перечислений hidden в той же области.
В поиске, в котором имена функций не игнорируются,34 а nested-name-specifierкласс назначает C:
если имя, указанное после nested-name-specifier, при поиске C, является внедренным именем класса C (Пункт [class]), или
в using-declaratorиз , using-declarationчто это member-declaration, если имя , указанное после nested-name-specifierтакой же , как identifierи в simple-template-id«х template-nameв последнем компоненте из nested-name-specifier,
вместо этого считается, что имя является именем конструктора класса C. [ Note: Например, конструктор не является приемлемым результатом поиска, elaborated-type-specifierпоэтому конструктор не будет использоваться вместо введенного имени класса. ] Такое имя конструктора должно использоваться только в объявлении, которое называет конструктор, или в . [ — end note declarator-idusing-declaration Example:
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.