Интересны [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.
Аргумент неявного объекта должен соответствовать параметру неявного объекта, присвоенному функциям-членам во время разрешения перегрузки. Он не используется при вызове выбранной функции. Поскольку все функции-члены имеют один и тот же неявный параметр объекта, надуманный объект не будет причиной выбора или отклонения функции.