On 05/09/2013 11:06 PM, Jonathan M Davis wrote:
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


Yes.

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.

...

Actually, no. This would instantiate the ref version in any case, hence only one instantiation is necessarily required.

Reply via email to