On 27 April 2013 05:31, Jonathan M Davis <jmdavisp...@gmx.com> wrote:

> On Friday, April 26, 2013 14:15:07 Manu wrote:
> > > I mean is that the way that auto ref should work with non-templated
> > > functions
> > > is that
> > >
> > > auto foo(auto ref T param) {...}
> > >
> > > becomes
> > >
> > > auto foo(ref T param) {...}
> > >
> > > underneath the hood. Then when you pass an rvalue to it - e.g.
> foo(T(5)) -
> > > that gets translated to something like
> > >
> > > T __temp = T(5);
> > > foo(__temp);
> > >
> > > Then auto ref works with both lvalues and rvalues with only one
> function
> > > definition, and ref is unchanged in how it works (it still only accepts
> > > lvalues).
> >
> > Why bother with 'auto'? Why not just make this default behaviour?
>
> For the same reason that T& doesn't take rvalues in C++ while const T&
> does.
> There's a big difference between wanting an argument to be passed as
> efficiently
> as possible and specifically wanting to alter the argument being passed in.
> Plain ref is for cases where you explicitly want to mutate the argument.
> You're just asking for bugs if you allow ref to accept rvalues. We've had
> problems like this before when some literals were treated as lvalues. The
> behavior of a function which takes its argument by ref and the behavior of
> one
> which takes its argument by auto ref are fundamentally different.
>

So you're saying it should be const ref instead of auto ref...
I agree.

Reply via email to