On Wed, 03 Jun 2015 03:09:06 -0400, Namespace <rswhi...@gmail.com> wrote:

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.


Hmm.... Indeed. It seems I misunderstood DIP25. I didn't think that was allowed.

It appears that even this is allowed:

private Texture* _tex;
struct Sprite {
    this(ref Texture tex) {
        _tex = &tex;
    }
}

Is DIP25 intended to eventually prevent these examples?

Wouldn't it have made more sense for DIP25 prevent _all_ escaping, including pointers? or is that not possible?
Then, instead of 'return ref' it could be 'escape ref' or something.
Anyways, moot point I suppose.

  Bit

Reply via email to