The expression
S(16) + S(23)
creates three temporaries:
a first temporary
T1
to hold the result of the expression
S(16),
a second temporary
T2
to hold the result of the expression
S(23),
and a third temporary
T3
to hold the result of the addition of these two expressions
.The temporary
T3
is then bound to the reference
cr.It is unspecified whether
T1
or
T2
is created first
.On an implementation where
T1
is created before
T2,
T2
shall be destroyed before
T1.The temporaries
T1
and
T2
are bound to the reference parameters of
operator+;
these temporaries are destroyed at the end of the full-expression
containing the call to
operator+.The temporary
T3
bound to the reference
cr
is destroyed at the end of
cr's
lifetime, that is, at the end of the program
.In addition, the order in which
T3
is destroyed takes into account the destruction order of other objects with
static storage duration
.That is, because
obj1
is constructed before
T3,
and
T3
is constructed before
obj2,
obj2
shall be destroyed before
T3,
and
T3
shall be destroyed before
obj1. — 
end example]