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