Under the conditions specified in [dcl.init], as
part of a copy-initialization of an object of class type, a user-defined
conversion can be invoked to convert an initializer expression to the
type of the object being initialized.
Overload resolution is used
to select the user-defined conversion to be invoked.
When the type of the initializer expression is a class type
the non-explicit conversion functions of
and its base classes are considered.
When initializing a temporary object ([class.mem])
to be bound to the first parameter of a constructor
where the parameter is of type
“reference to possibly cv-qualified T”
and the constructor is
called with a single argument in the context of
direct-initialization of an object of type “cv2T”, explicit
conversion functions are also considered.
Those that are not hidden within
and yield a type whose cv-unqualified version is the same type as
or is a derived class thereof
are candidate functions.
Conversion functions that return “reference to
lvalues or xvalues, depending on the type of reference, of type
and are therefore considered to yield
process of selecting candidate functions.