On Tuesday, 25 December 2012 at 14:11:14 UTC, Andrei Alexandrescu
wrote:
On 12/25/12 5:36 AM, Jonathan M Davis wrote:
On Tuesday, December 25, 2012 11:14:40 Namespace wrote:
What does this generate?
auto foo(auto ref S a, auto ref S b, auto ref S c, auto ref S
d) { ... }
16 different functions, one for each combination? Sounds
like a
bad idea.
In my opinion, this should produce only two functions:
#1: auto foo(ref S a, ref S b, ref S c, ref S d) { ... }
#2: auto foo(S a, S b, S c, S d) { ... }
So, you'd take the performance hit of copying all of your
function arguments
simply because one of them was an rvalue?
No. I think that Peter's point shows exactly why this is a bad
idea.
However, creating only one version of the function which takes
all refs and
specifcally creating variables underneath the hood for any
rvalues so that
they can be passed to the function still seems like it could
work.
Yes, that does work and is easy to implement.
Andrei
Sound like the wayt o go for me. But is ato ref needed in such
case ? Why not simply allow ref to behave that way ?