Const ref and rvalues again...
martin
kinke at libero.it
Mon Nov 5 05:30:36 PST 2012
On Monday, 5 November 2012 at 08:01:57 UTC, Jonathan M Davis
wrote:
> auto ref's current semantics can't possibly work with
> non-templated functions,
> and it's clear that there are good reasons for keeping auto ref
> as it is now
> for templates. So, either we make it work with non-templated
> functions with
> different (albeit similar) semantics, or we need a new
> attribute for doing what
> we want to do with non-templated functions.
I agree that the current auto ref semantics are only useful for
templates since "auto ref T" is replaced by either a reference
(ref T for lvalues) or a value (T for rvalues), two very
different things.
I don't know how auto ref for templates is currently implemented,
i.e., if, given a function
void foo(T)(auto ref T x, auto ref T y) {}
the compiler would instantiate the template max 2^2 times for
each used type T to cover all lvalue/rvalue combinations for x
and y. In that case, treating a non-templated function
void foo(auto ref MyStruct x, auto ref MyStruct y) {}
as implicit template (without template parameters) would be a
viable option imho, i.e.,
void foo()(auto ref MyStruct x, auto ref MyStruct y) {}
If that kind of auto-templating is not what we want, I'd
definitely opt for allowing rvalues as "in ref" parameters to
keep things simple.
More information about the Digitalmars-d
mailing list