Re: "lifetime of temporary bound to reference..."
James Kanze wrote:
On Jan 26, 7:25 pm, Victor Bazarov <v.Abaza...@comAcast.net> wrote:
Igor R. wrote:
Does the rule in the subj applies to the following:
First, very importantly, the rule in the subject doesn't exist.
Whether a temporary is bound to a reference has no effect on its
lifetime. The only time the lifetime of a temporary is extended
is if a reference is initialized with a rvalue. (The
difference, of course, is whether a temporary is bound to a
reference is a transitive relationship; whether a temporary was
initialized with an rvalue isn't.)
I believe you're attempting to split hairs. Please see the second
sentence of 12.2/5. "The temporary to which the reference is bound ...
persists for the lifetime of the reference". If that's not "lifetime of
temporary bound to reference", what exactly is it?
[..]
struct S
{
S& me() { return *this ; }
} ;
S& rs = S().me() ;
The reference rs is clearly bound to a temporary, even though
the reference is non-const. On the other hand, the reference
was not initialized with an rvalue expression, so the lifetime
of the temporary will NOT be extended beyond the end of the full
expression. (Technically, the temporary object S() will be
destructed before the reference rs is initialized. In practice,
there's no way a conforming program can tell, however.)
A conforming program? If the temporary is destructed before 'rs' is
initialised, doesn't this program have undefined behavior? Is it
conforming regardless of having UB?
Don't bother. The two identical halves of the hair split by this
perfect exercise have fallen gracefully to the floor. Success! The OP
now knows that he wouldn't be able to tell one half from the other in a
conforming program. Heaps of knowledge.
I honestly regret wasting time reading your reply.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask