On Wed, 28 Mar 2012, Marc Glisse wrote:
On Sun, 25 Mar 2012, Marc Glisse wrote:
- a first goal is simple functions, with a single return statement (which
may even often be the only statement).
After playing with it a bit, I am not sure how to use it in the simple
forwarding case:
T f(int);
auto g(int i){return f(i);}
If T is a reference, this does a copy.
auto&& g(int i){return f(i);}
Now if T is not a reference, this returns a reference to a destroyed
temporary.
I haven't given this idea much thought, but here goes:
The main issue seems to be that "auto&&" deduction gives a dangerous
unusable answer on a temporary. Well, let's change that to make the
deduction be the same as plain "auto" in that case (how different does
that make it from decltype?). Sure, it requires some more complicated
wording. But to users, it could actually be more intuitive as auto&& would
remain a do-what-I-mean perfect forwarder. And plain "auto" would remain
compatible with lambdas.
--
Marc Glisse