16 Overloading [over]

16.3 Overload resolution [over.match]

16.3.1 Candidate functions and argument lists [over.match.funcs]

16.3.1.1 Function call syntax [over.match.call]

16.3.1.1.1 Call to named function [over.call.func]

Интересны [over.call.func] только те вызовы функций, в которых в postfix-expression конечном итоге содержится имя, обозначающее одну или несколько функций, которые могут быть вызваны. Такой postfix-expression, возможно заключенный произвольно глубоко в круглые скобки, имеет одну из следующих форм:

postfix-expression:
	postfix-expression . id-expression
	postfix-expression -> id-expression
	primary-expression

Они представляют две синтаксические подкатегории вызовов функций: квалифицированные вызовы функций и неквалифицированные вызовы функций.

В квалифицированных вызовах функций разрешаемое имя - это оператор или, id-expression которому предшествует оператор. Поскольку конструкция обычно эквивалентна , остальная часть предложения предполагает без потери общности, что все вызовы функций-членов были нормализованы к форме, которая использует объект и оператор. Кроме того, Clause предполагает, что левый операнд оператора имеет тип « », где обозначает класс . При этом предположении, вызов в вызове рассматривается как функция-член следования правилам поиска имен в classes ( ). Объявления функций, найденные в результате этого поиска, составляют набор функций-кандидатов. Список аргументов в вызове дополнен добавлением левого операнда оператора в вызове нормализованной функции-члена в качестве подразумеваемого аргумента объекта ( ).->.A->B(*A).B [over] . [over] postfix-expression.cv TT125id-expressionT[class.member.lookup]expression-list.[over.match.funcs]

В неквалифицированных вызовах функций имя не уточняется оператором-> или .и имеет более общую форму primary-expression. Имя ищется в контексте вызова функции в соответствии с обычными правилами для name lookup вызовов функций. Объявления функций, найденные в результате этого поиска, составляют набор функций-кандидатов. Из-за правил поиска имени набор функций-кандидатов состоит (1) полностью из функций, не являющихся членами, или (2) полностью из функций-членов некоторого класса T. В случае (1) список аргументов такой же, как expression-list в вызове. В случае (2) список аргументов expression-list в вызове дополнен добавлением подразумеваемого аргумента объекта, как при квалифицированном вызове функции. Если ключевое слово this находится в области видимости и относится к классу Tили производному классу T, то подразумеваемым аргументом объекта является (*this). Если ключевое слово this не входит в область видимости или относится к другому классу, то надуманный объект типа T становится подразумеваемым аргументом объекта126. Если список аргументов дополняется надуманным объектом и при разрешении перегрузки выбирается одна из нестатических функций-членов T, вызов имеет неправильный формат.

Обратите внимание, что cv-квалификаторы для типа объектов важны для разрешения перегрузки как для объектов glvalue, так и для объектов класса prvalue.

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