Разрешение перегрузки квалифицированного имени - PullRequest
0 голосов
/ 19 октября 2018

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

foo::bar();

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

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

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

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

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

1 Ответ

0 голосов
/ 21 октября 2018

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

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

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

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

Правило «поиск в контексте expr » здесь не применяется, так как указано, какое правило используется.Этот абзац вступает в игру только тогда, когда это не так.Например, в [class.qual] p1 :

имена в аргументе шаблона идентификатора шаблона ищутся в контексте, в котором встречается все постфиксное выражение .

...