Rvalue references - The resolution
Steven Schveighoffer
schveiguy at yahoo.com
Mon May 6 09:10:12 PDT 2013
On Sat, 04 May 2013 19:30:21 -0700, Jonathan M Davis <jmdavisProg at gmx.com>
wrote:
> However, if we had an attribute which explicitly designated that a
> function
> accepted both rvalues and lvalues (which is what auto ref was originally
> supposed to do as Andrei proposed it), then if you saw
>
> auto foo(ref int i);
> auto bar(auto ref int i);
>
> then you could be reasonably certain that foo was intending to alter its
> arguments and bar was not.
The counter argument:
foo(makeRvalue()); // error: cannot pass rvalues to ref
// programmer: WTF? This is stupid, but ok:
auto x = makeRvalue();
foo(x);
In other words, explicit nops aren't any better than implicit nops. Even
if we *require* the user to be explicit (and it's not at all clear from a
code-review perspective that the auto x line is to circumvent the
requirements), the fact that this is trivially circumvented makes it a
useless feature. It's like having const you can cast away.
I think the larger issue with binding rvalues to refs is this:
int foo(int i);
int foo(ref int i);
what does foo(1) bind to? It MUST bind to the non-ref, or there is no
point for it.
If this can be solved, binding rvalues to refs is fine.
-Steve
More information about the Digitalmars-d
mailing list