Otherwise, if the initializer expression
- is an rvalue (but not a bit-field) or an lvalue of function type and
“cv1 T1” is
reference-compatible with “cv2 T2”, or
- has a class type (i.e., T2 is a class type), where T1
is not reference-related to T2, and can be converted to
an rvalue of type “cv3 T3” or
an lvalue of function type “cv3 T3”,
where “cv1 T1” is
reference-compatible with “cv3 T3” (see [over.match.ref]),
then
the initializer expression in the first case and
the converted expression in the second case
is called the converted initializer
. If the converted initializer is a prvalue,
let its type be denoted by
T4;
the temporary materialization conversion (
[conv.rval]) is applied,
considering the type of the prvalue to be
“
cv1 T4” (
[conv.qual])
. In any case,
the reference binds to the resulting glvalue
(or to an appropriate base class subobject)
.