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