[over.ics.user] # 12 Overloading [[over]](./#over) ## 12.2 Overload resolution [[over.match]](over.match#over.ics.user) ### 12.2.4 Best viable function [[over.match.best]](over.match.best#over.ics.user) #### 12.2.4.2 Implicit conversion sequences [[over.best.ics]](over.best.ics#over.ics.user) #### 12.2.4.2.3 User-defined conversion sequences [over.ics.user] [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/overloading.tex#L2339) A [*user-defined conversion sequence*](#def:conversion_sequence,user-defined "12.2.4.2.3 User-defined conversion sequences [over.ics.user]") consists of an initial standard conversion sequence followed by a user-defined conversion ([[class.conv]](class.conv "11.4.8 Conversions")) followed by a second standard conversion sequence[.](#1.sentence-1) If the user-defined conversion is specified by a constructor ([[class.conv.ctor]](class.conv.ctor "11.4.8.2 Conversion by constructor")), the initial standard conversion sequence converts the source type to the type of the first parameter of that constructor[.](#1.sentence-2) If the user-defined conversion is specified by a [conversion function](class.conv.fct "11.4.8.3 Conversion functions [class.conv.fct]"), the initial standard conversion sequence converts the source type to the type of the object parameter of that conversion function[.](#1.sentence-3) [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/overloading.tex#L2354) The second standard conversion sequence converts the result of the user-defined conversion to the target type for the sequence; any reference binding is included in the second standard conversion sequence[.](#2.sentence-1) Since an implicit conversion sequence is an initialization, the special rules for initialization by user-defined conversion apply when selecting the best user-defined conversion for a user-defined conversion sequence (see [[over.match.best]](over.match.best "12.2.4 Best viable function") and [[over.best.ics]](over.best.ics "12.2.4.2 Implicit conversion sequences"))[.](#2.sentence-2) [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/overloading.tex#L2364) If the user-defined conversion is specified by a specialization of a conversion function template, the second standard conversion sequence shall have Exact Match rank[.](#3.sentence-1) [4](#4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/overloading.tex#L2369) A conversion of an expression of class type to the same class type is given Exact Match rank, and a conversion of an expression of class type to a base class of that type is given Conversion rank, in spite of the fact that a constructor (i.e., a user-defined conversion function) is called for those cases[.](#4.sentence-1)