On Wednesday, 3 June 2015 at 03:57:38 UTC, bitwise wrote:
I forgot to mention, in terms of this statement I made:

I can't remember right now what the reasoning was for 'const ref' not to take rvalues in the first place. I think it was that you could escape the reference,
but this isn't true anymore with DIP25 right?

I think someone brought this up about a weeks ago,
That was me.
and this was Andrei's response:

Knee-jerk response: if no "return" attribute on a function it should be safeto bind rvalues to ref parameters. Of course that's impractical as a default
so explicit "auto ref" would be needed. -- Andrei

What's impractical?

It's dangerous. If rvalues could be passed to normal ref parameter we would have a problem. Consider this:

----
struct Sprite {
    private Texture* _tex;

    this(ref Texture tex) {
        _tex = &tex;
    }
}
----

This works because we accept a valid lvalue and store a pointer to it. If the CTor would accept also rvalues, then the pointer would be invalid, since the texture was just a temporary variable. Not the best example, but I think you understand what I mean.

Reply via email to