Variadic function parameters passed by move
Ali Çehreli via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Dec 21 15:29:32 PST 2016
On 12/21/2016 02:59 PM, Nordlöw wrote:
> On Wednesday, 21 December 2016 at 21:02:17 UTC, Ali Çehreli wrote:
>> void f(Rs...)(Rs ranges)
>> {
>> import std.functional: forward;
>> g(forward!ranges);
>
> Interesting. How does this differ from std.algorithm.mutation.move()
> when R.length is 1?
>
> Why do we have both `move` and `forward`, then?
Here is what I understand after glancing the documentation again:
* 'move' is for moving state, which may necessitate destroying the
source if leaving it behind can cause harm. For example, if the object
has a destructor or post-blit, then the source should be "silenced" :)
to prevent doing it twice.
* As an added bonus, 'move' seems to be one spot (the only?) that D
validates that a struct object does not have internal pointers.
* 'forward' is for forwarding arguments to functions. It seems to an
answer to "perfect forwarding" that I know from C++: maintain
by-ref'ness of arguments when forwarding them to other functions.
Ali
More information about the Digitalmars-d-learn
mailing list