On 10 May 2013 06:07, Rob T <alanb@ucora.com> wrote:
On Thursday, 9 May 2013 at 19:43:25 UTC, Andrei Alexandrescu wrote:
On 5/9/13 3:39 PM, 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.

There would be clear restrictions on non-template functions, e.g. a non-template cannot return auto ref.

Andrei

OK I can understand that auto ref on return for a template function is something different, so disallowing auto ref on a regular function makes perfect sense to me.

It doesn't make sense though. You're creating an arbitrary restriction because overloading an existing meaning doesn't apply (actually conflicts) in this case.
auto is a template concept, it should not be applied here.

Refer to all the reasoning behind scope ref instead...

You can also create template functions with auto ref params that behave exactly like a non-template counter part by not specifying ref on the return, so it seems consistent and a sound solution from that perspective.

Umm, what if the non-template counterpart returns ref? Then it doesn't behave the same.

D is a complex language, so stuff like this does take some getting used to, but it is very powerful and flexible, no two ways around it.

If this takes 'getting used to', you're basically admitting that it doesn't make intuitive sense.