auto ref and non-templated functions

Peter Alexander peter.alexander.au at gmail.com
Tue Dec 25 06:15:53 PST 2012


On Tuesday, 25 December 2012 at 14:09:13 UTC, Andrei Alexandrescu 
wrote:
> On 12/25/12 12:34 AM, Zhenya wrote:
>> On Tuesday, 25 December 2012 at 01:40:16 UTC, Peter Alexander 
>> wrote:
>>> On Tuesday, 25 December 2012 at 00:56:44 UTC, Peter Alexander 
>>> wrote:
>>>> On Monday, 24 December 2012 at 17:40:54 UTC, Jonathan M 
>>>> Davis wrote:
>>>>> And if that doesn't work, can we simply make it so that the 
>>>>> compiler
>>>>> automatically creates a variable when you pass an rvalue to 
>>>>> a
>>>>> non-templated
>>>>> auto ref function?
>>>>
>>>> I don't see any problems with this, but I admittedly haven't 
>>>> thought
>>>> too much about it.
>>>
>>> If there are no problems with this way, then what I want to 
>>> know is
>>> why the template version of auto ref wasn't implemented this 
>>> way. The
>>> way auto ref is currently implemented for templates is a bit 
>>> of a mess.
>> Maybe it's difficult to generate both versions because for the 
>> function
>> like this
>>
>> void foo(auto ref S s1,auto ref S s2,...,auto ref s10)
>>
>> compiler should generate 2^10 versions of function foo.
>
> The compiler will only generate as many versions as there are 
> compatible calls.

If it were a template. Jonathan's (first) proposal is that they 
are all generated eagerly, so that they can be used as virtual 
functions (among other things). Generating them lazily like 
template defeats the purpose of his proposal (to do that, just 
use templates!)

The first proposal is a dead end. I think his second proposal is 
more interesting, so I will repeat it here:

"Can we simply make it so that the compiler automatically creates 
a variable when you pass an rvalue to a non-templated auto ref 
function?"

So non-template auto ref parameters are just like ref parameters, 
except they will automatically convert rvalues to lvalues on call 
by creating a local variable. Normal ref parameters will still 
need lvalues.


More information about the Digitalmars-d mailing list