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

Reply via email to