The liabilities of binding rvalues to ref

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Thu May 9 19:08:54 PDT 2013


On 5/9/13 8:08 PM, Manu wrote:
> On 10 May 2013 09:01, Rob T <alanb at ucora.com <mailto:alanb at ucora.com>>
> wrote:
> It IS confusing that auto-ref would do 2 completely different things.
> One automatically selecting ref-ness, the other saying "i can safely
> receive a temporary". There is nothing 'automatic' about the latter.

The behaviors are strongly related because automatically selecting 
refness entails dealing between rvalues and lvalues.

The most confusing thing would be to choose between:

- ref
- auto ref
- scope ref

It is clear to me things could be designed that way. Practically it 
would be a massive fail because the last two are so closely related, and 
different in ever subtle ways. I could safely say on Walter and my 
behalf that we believe such a design would not serve D well at all.

> As I've had to re-iterate countless times, and such is the massive
> fallacy behind all of these threads, this whole debate is NOT about
> lvalues/rvalues, and I wish people would stop using the term 'rvalue' in
> their posts, I worry that they misunderstand the problem every time it's
> said.

It never hurt any of us to entertain the idea that the fallacy may lie 
within.

> This code is broken:
>    void f(ref int x) {}
>    int x;
>    f(x);

That code is not broken.

> x is an lvalue.
> This is the real problem case, and addressing this will solve the rvalue
> case at the same time.
> Passing an rvalue to a function just generates an implicit temp which is
> functionally identical to the above, except the lifetime of a temp is
> usually the life of the statement rather than the outer scope.
> The problem we need to solve is that of a function being able to safely
> receive a _temporary_.

Oh, you mean an rvalue? :o)


Andrei


More information about the Digitalmars-d mailing list