Разрешение перегрузки квалифицированного имени

Рассмотрим этот вызов функции:

foo::bar();

11.3.1.1.1, пункт 3 [over.call.func] (N4778) охватывает этот случай:

В неквалифицированных вызовах функций имя не определяется -> или же . оператор и имеет более общую форму первичное выражение. Имя ищется в контексте вызова функции следуя обычным правилам поиска имен в вызовах функций …

Вот, foo::bar это неквалифицированное имя, в том смысле, что он не квалифицирован -> или же .. Таким образом, этот пункт применяется. Теперь значение фразы «посмотрел в контексте» объясняется в пункте 6.4 пункта [basic.lookup]:

Имя «смотрел вверх в контексте выражения» ищется как неквалифицированное имя в области, где выражение найдено.

Тем не мение, foo::bar это квалифицированное имя в сфере поиска имени. Другими словами, эта комбинация параграфов в основном говорит, что квалифицированное имя foo::bar ищется по правилу безусловного поиска имени. Однако я не думаю, что поиск безусловного имени способен рекурсивно войти в более узкую область, то есть foo в bar, Это дефект?

4

Решение

Нет, я не думаю, что это дефект. Это говорит

Имя ищется в контексте вызова функции следуя обычным правилам поиска имен в вызовах функций […]

Как видно из части, которую я выделил, стандарт определяет способ поиска имени: По имени.

Поиск имени включает в себя неквалифицированный, квалифицированный и зависимый от аргумента поиск, поэтому ваше имя действительно разрешается правилами поиска по квалифицированным именам.

«Посмотрел вверх в контексте выраж«Правило здесь не применяется, так как указано, какое правило используется. Этот параграф вступает в игру только тогда, когда его нет. Например, в [Class.qual] p1:

имена в Шаблон-аргумент из Шаблон-идентификатор ищутся в контексте, в котором весь постфикс-выражение происходит.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]