My thoughts & tries with rvalue references
Zach the Mystic
reachzach at gggggmail.com
Thu Apr 4 17:12:32 PDT 2013
On Thursday, 4 April 2013 at 07:52:51 UTC, Dicebot wrote:
> After some thinking on topic I come to conclusion that rvalue
> refs _should_ be "scope ref" and stuff like "ref int f(@temp
> ref int x) { return x; }" is invalid. I can see no valid use
> case for such an error-prone case.
Perhaps they should, but at least I will give the use case I was
thinking of.
If you've got a large struct, you don't want to pass it by value.
Say you've got two functions which process and return a Large,
and they accept rvalue refs. It might not be too much to ask that
a Large always be an lvalue, but let's say you want to pass it
directly by value for some reason.
struct Large { ... }
ref Large process1(@temp ref Large a) { return a; }
ref Large process2(@temp ref Large a) { return a; }
Large* lar = &process2(process1(Large("Pass"," a ", "Large",
"here")));
The use case would allow this to work. And with the kind of error
checking suggested in DIP25, this kind of construction would not
actually be error prone. 'lar' would be understood as locally
derived and could not escape the function it was defined in.
But to speak to your point, this kind of single expression
chaining of ref functions might be so rare that there's no great
reason to allow it in tandem with rvalues.
More information about the Digitalmars-d
mailing list