$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [operators] moving forward use return by reference for compilers with proper support?
From: Niall Douglas (ndouglas_at_[hidden])
Date: 2013-05-01 14:09:37
> Operators returning rvalue references are NOT safe. The C++98/03/11/14+
rules
> apply to this scenario:
>
> X temporary();
> const X& r = temporary(); // ok, lives as long as r does
> X&& r2 = temporary(); // ok, lives as long as r2 does
>
> They do NOT apply to this scenario:
>
> X&& func(X&& x) { return std::move(x); }
> const X& r3 = func(temporary()); // DANGLING REFERENCE
> X&& r4 = func(temporary()); // DANGLING REFERENCE
>
> The Standardization Committee made this mistake when applying rvalue
> references to string's operator+(), which was fixed before C++11 was
released.
I completely agree. 99.9% of the time the only reason to *ever* return
rvalue refs from an operator() is when you're passing through a parameter.
Otherwise, return by value and leave the compiler's optimizer do its job.
Niall
--- Opinions expressed here are my own and do not necessarily represent those of BlackBerry Inc.