On Monday, 8 January 2018 at 23:31:27 UTC, Jonathan M Davis wrote:


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

foo(42);

will result in foo being instantiated as

int foo(int t)
{
    return t;
}

whereas

int i;
foo(i);

will result in foo being instantiated as

int foo(ref int t)
{
    return t;
}

So, by using auto ref, a function can accept both lvalues and rvalues. And in D, rvalues get moved, not copied.

What does it mean to "move" a variable/value instead of copying it?

Was "auto ref" created for anything besides structs?

Reply via email to