The liabilities of binding rvalues to ref
Rob T
alanb at ucora.com
Thu May 9 12:39:14 PDT 2013
On Thursday, 9 May 2013 at 19:26:37 UTC, Jonathan M Davis wrote:
> On Thursday, May 09, 2013 19:45:16 Peter Alexander wrote:
>> It seems that 'auto ref' would be suitable, provided we can
>> find
>> a way for it to work with normal functions (in a sensible way,
>> not like templates).
>
> That's trivial enough. All you have to do is lower code like
>
> auto foo(auto ref int i) {...}
>
> foo(5);
>
> to something like
>
> auto foo(ref int i) {...}
>
> auto __temp = 5;
> foo(__temp);
>
> And temporaries end up on the stack anyway, so you wouldn't
> really even have
> to lower it to quite like that, but that's what would be
> happening
> conceptually. It's also what would happen if plain ref accepted
> rvalues. It's
> just that we avoid certain classes of issues by having
> something distinct from
> plain ref for accepting rvalues by ref. The implementation
> itself is
> straightforward. If anything, I think that argument comes down
> primarily to
> two things:
>
> 1. Should plain ref accept rvlaues?
>
> 2. If plain ref shouldn't accept rvalues, then what attribute
> do we use to
> accept rvalues by ref?
>
> And given that the whole point of adding auto ref to the
> language was to solve
> exactly this problem, I think that it makes perfect sense to
> just use auto
> ref.
>
> - Jonathan M Davis
So, if I understand correctly, auto ref for templates will end up
doing exactly the same thing as auto ref for non-template
functions? That would be perfect, otherwise it'll be terribly
confusing.
More information about the Digitalmars-d
mailing list