If I understand correctly (and I very well might not), the idea is that auto ref is *always* ref, so only one function is generated.  The main difference between auto ref and ref is that ref doesn't allow rvalues.  Saying auto ref is basically like saying to the compiler: "yeah, I know it's an rvalue, still pass it as ref".

If that's correct, I think the way to look at it is these three situations:

1. I want to change the value, and/or I want to disallow rvalues: use ref
2. I want to pass by reference because the struct is large: use auto ref (includes rvalues), possibly const as well.
3. I want to optimize passing large structs for both rvalues and lvalues: use two overloads, one with const ref, one by value.

Andrei, I hate to ask this, because I feel very confused from all the statements you have previously made, but could you explain this again?

To be honest, if what I've said is correct, it still sounds so clunky and awkward...

-Steve


From: Walter Bright <walter@digitalmars.com>
To: Discuss the dmd beta releases for D <dmd-beta@puremagic.com>
Sent: Monday, April 9, 2012 11:55 PM
Subject: Re: [dmd-beta] D 2.059 beta 4



On 4/9/2012 7:44 PM, Jonathan M Davis wrote:
> On Monday, April 09, 2012 19:40:43 Walter Bright wrote:
>> On 4/9/2012 7:32 PM, Nick Sabalausky wrote:
>>> Although, if there really is good merit to struct lits not veing lvalues,
>>> then maybe all we need is to wait until "auto ref" is usable for
>>> non-templates? (If that would even be possible...?)
>> Not possible, as the binary ABI would be different.
> It was my understanding that the auto ref was supposed to work with non-
> templated functions - at least what Andrei proposed was - but that you
> misunderstood that and made it only work with templates. And as long as it
> only works with templates, it's usefulness is very limited. opEquals would be
> a _prime_ case for where it would be useful.
>

How could that possibly work for the same function, considering that the code
for each would be quite different, including the calling code?

_______________________________________________
dmd-beta mailing list
dmd-beta@puremagic.com
http://lists.puremagic.com/mailman/listinfo/dmd-beta