16 Overloading [over]

16.3 Overload resolution [over.match]

16.3.3 Best viable function [over.match.best]

16.3.3.1 Implicit conversion sequences [over.best.ics]

16.3.3.1.2 User-defined conversion sequences [over.ics.user]

Определяемая пользователем последовательность преобразования состоит из начальной стандартной последовательности преобразования, за которой следует определяемое пользователем преобразование ([class.conv]), за которым следует вторая стандартная последовательность преобразования. Если определяемое пользователем преобразование равно specified by a constructor, начальная стандартная последовательность преобразования преобразует исходный тип в тип, требуемый аргументом конструктора. Если определяемое пользователем преобразование указано с помощью conversion function, начальная стандартная последовательность преобразования преобразует исходный тип в неявный объектный параметр функции преобразования.

Вторая стандартная последовательность преобразования преобразует результат определенного пользователем преобразования в целевой тип последовательности. Поскольку неявная последовательность преобразования является инициализацией, при выборе наилучшего пользовательского преобразования для пользовательской последовательности преобразования применяются специальные правила инициализации с помощью пользовательского преобразования (см. [over.match.best] И [over.best.ics]).

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

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