const ref rvalues

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Mon Dec 14 12:38:34 PST 2009


Denis Koroskin wrote:
> On Mon, 14 Dec 2009 21:06:20 +0300, dsimcha <dsimcha at yahoo.com> wrote:
> 
>> I mentioned this deep in another thread, but I think it deserves its own
>> thread.  Can we get something like:
>>
>> void doStuff(T)(const ref T val) {
>>     // do stuff.
>> }
>>
>> T getVal() {
>>     return someValue;
>> }
>>
>> void main() {
>>     doStuff(getVal());  // Doesn't currently work.
>> }
>>
>> For non-const ref parameters, it's understandable that passing rvalues in
>> doesn't work because this is likely a bug that the compiler should catch.
>> However, for const ref parameters, can't the compiler just implicitly 
>> put the
>> value on the caller's stack frame and convert it to an lvalue rather than
>> forcing the programmer to write the boilerplate to do this manually?  
>> This
>> would result in:
>>
>> doStuff(getVal()); -->
>>
>> auto __temp = getVal();
>> doStuff(__temp);
> 
> I agree it hurts a lot. I faced the same problem implementing 
> RefCounted: you can't return RefCounted object from one function and 
> pass it by reference to another one. Passing it by value is not a good 
> option.

The compiler will optimize that case.

Andrei



More information about the Digitalmars-d mailing list