16 Overloading [over]

16.3 Overload resolution [over.match]

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

16.3.1.6 Initialization by conversion function for direct reference binding [over.match.ref]

В условиях, указанных в [dcl.init.ref], ссылка может быть связана непосредственно с glvalue или классом prvalue, который является результатом применения функции преобразования к выражению инициализатора. Разрешение перегрузки используется для выбора вызываемой функции преобразования. Предполагая, что «ссылка на cv1 T» - это тип инициализируемой ссылки, а «cv S» - это тип выражения инициализатора, с S типом класса функции-кандидаты выбираются следующим образом:

  • Рассмотрены функции преобразования S и его базовые классы. Те неявные функции преобразования, которые не скрыты внутри S и дают тип «ссылка lvalue на cv2 T2» (при инициализации ссылки lvalue или ссылки rvalue на функцию) или «cv2 T2» или «ссылка rvalue на cv2 T2» (при инициализации ссылки rvalue или lvalue ссылка на функцию), где «cv1 T» стоит reference-compatible с «cv2 T2», являются функциями-кандидатами. Для прямой инициализации те явные функции преобразования, которые не скрыты внутри S и дают тип «ссылка lvalue на cv2 T2» или «cv2 T2» или «ссылка rvalue на cv2 T2», соответственно, где T2 тот же тип T или может быть преобразован в тип T с a qualification conversion, являются также кандидатские функции.

Список аргументов имеет один аргумент, который является выражением инициализатора. [ Note: Этот аргумент будет сравниваться с неявным параметром объекта функций преобразования. ]end note