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.
A call to a conversion function returning “reference to X”
is a glvalue of type X, and such a conversion function is
therefore considered to yield X for this process of selecting