On 4/10/2012 3:59 AM, Steve Schveighoffer wrote:
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.
No. Two functions are 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 <[email protected]>
*To:* Discuss the dmd beta releases for D <[email protected]>
*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
[email protected] <mailto:[email protected]>
http://lists.puremagic.com/mailman/listinfo/dmd-beta
_______________________________________________
dmd-beta mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-beta
_______________________________________________
dmd-beta mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-beta