auto ref is on the docket

via Digitalmars-d digitalmars-d at puremagic.com
Mon Jun 22 09:23:16 PDT 2015


On Monday, 22 June 2015 at 13:49:31 UTC, Jonathan M Davis wrote:
> On Monday, 22 June 2015 at 13:23:47 UTC, Marc Schütz wrote:
>> On Monday, 22 June 2015 at 04:11:41 UTC, Andrei Alexandrescu 
>> wrote:
>>> Walter and I discussed what auto ref for templates should 
>>> look like and reached the conclusion that an approach based 
>>> on lowering would be best. I added a proposed lowering to 
>>> https://github.com/D-Programming-Language/dmd/pull/4717.
>>
>> I have to concur with Manu's statement in the PR. IMO `auto 
>> ref` (i.e. the status quo) is a hack introduced because of the 
>> lack of usable `scope`. We shouldn't spread it to other parts 
>> of the language, at least not for rvalue references. `scope 
>> ref` is the perfect fit for those.
>>
>> (There may still be a use for `auto ref` with the meaning 
>> "pass this as efficiently as possible, I don't care whether 
>> it's a reference or not", but I'm not convinced of that 
>> either.)
>
> I'm afraid that I don't understand this. What on earth does 
> scope have to do with this issue? We need a way to indicate 
> that a parameter should accept both lvalues and rvalues.

`scope` is a precondition for doing this safely. As Manu pointed 
out, rvalues are merely a special case of a more general problem, 
but with them, the risk of misuse is much higher than with local 
variables. That was probably the reason why `ref` originally was 
designed not to accept rvalues. Given a working `scope` feature, 
that reason is no longer relevant, therefore `scope ref` can 
safely accept both rvalues and lvalues.


More information about the Digitalmars-d mailing list