On Thursday, May 09, 2013 21:39:14 Rob T wrote:
> So, if I understand correctly, auto ref for templates will end up
> doing exactly the same thing as auto ref for non-template
> functions? That would be perfect, otherwise it'll be terribly
> confusing.

auto ref on templates would be essentially unchanged from what it is now (the 
fact that it forwards the refness of its arguments is actually very useful for 
some situations, and we don't want to lose that). However, what we might be 
able to do as an optimization would be to make it so that auto ref on 
templates acts the same as auto ref on non-templated functions when the 
compiler is able to determine that there's no real semantic difference - i.e. 
when the fact that the refness is being forwarded is irrelevant.

So, with a function like

auto foo(T)(auto ref T t)
{
 return t;
}

the non-templated solution could be used, whereas in a function like

auto ref foo(T)(auto ref T t)
{
 return t;
}

or

auto foo(T)(auto ref T t)
{
 return anotherFuncWhichTakesByAutoRef(t);
}

the compiler would have to use the normal templated solution, because the 
refness of the arguments would have an effect on the code.

- Jonathan M Davis

Reply via email to