Const ref and rvalues again...

Rob T rob at ucora.com
Tue Nov 6 18:06:08 PST 2012


On Tuesday, 6 November 2012 at 23:37:25 UTC, martin wrote:
>
> void func(T)(in auto ref T m);
>
> This template, as I understand it, gets expanded to:
>
> void func(T)(in ref T m); // for lvalues
> void func(T)(in T m);     // for rvalues
>
> So for non-templated functions, I suggest 2 options:
>
> 1) The previously described auto-templates (identical 'auto 
> ref' semantics), where a function with 'auto ref' parameters is 
> treated as implicit template. This may lead to code-bloating 
> (for larger functions) and/or higher performance for rvalue 
> arguments (rvalues passed to value arguments are moved, not 
> copied; we therefore gain nothing by passing a reference, but 
> incur a slight performance hit due to pointer indirection 
> instead of accessing directly the rvalue on the stack). OR
> 2) Simple under-the-hood temporary lvalue declaration by the 
> compiler (for rvalues passed to 'const ref' parameters) - that 
> would be a handy implementation of the first workaround.
>
> I hope you get my point. :)

What about the case where we want to pass a source argument 
either by reference or as a copy depending on the l/r value 
situation?

eg
void f( ref a );
void f( a );

--rt



More information about the Digitalmars-d mailing list