On Tuesday, 24 January 2017 at 08:49:17 UTC, Ali Çehreli wrote:
On 01/24/2017 12:47 AM, Ali Çehreli wrote:
> Lvalues are passed by reference and rvalues are copied.
I keep making that mistake! Despite the by-copy syntax, rvalues
are moved.
Ali
Further note that you can use conditional compilation with
`__traits(isRef)` as in
struct S {}
void f()(auto ref const S x)
{
static if (__traits(isRef, x)) // l-value `x` was passed by
ref
{
// special treatment of const ref x
}
else // r-value `x` was passed by move
{
// `x´ can be reused, for instance in a move-return
}
}
This is actually a very useful feature in some cases.
Used, for instance, in gmp-d announced yesterday here
http://forum.dlang.org/thread/mwkehzkdbwzygngea...@forum.dlang.org
for clever expression template optimization possible. AFAIK a
D-only feature.