std.range.interfaces : InputRange moveFront
Johan Engelen
j at j.nl
Fri Dec 1 09:11:40 UTC 2017
On Thursday, 30 November 2017 at 06:36:12 UTC, Ali Çehreli wrote:
>
> import std.range;
>
> struct S {
> int i;
> bool is_a_copy = false;
> this(this) {
> is_a_copy = true;
> }
> }
>
> void main() {
> auto r = [S(1)];
>
> auto a = r.front;
> assert(a.is_a_copy); // yes, a is a copy
> assert(a.i == 1); // as expected, 1
> assert(r.front.i == 1); // front is still 1
>
> auto b = r.moveFront();
> assert(!b.is_a_copy); // no, b is not a copy
> assert(b.i == 1); // state is transferred
> assert(r.front.i == 0); // front is int.init
> }
I tested it and it works like you wrote, but the behavior is
different for an array of integers...:
auto a = [ 1,2,3 ];
writeln(a.front); // 1
auto b = a.moveFront();
writeln(b); // 1
writeln(a.length); // still 3
writeln(a.front); // still 1
-Johan
More information about the Digitalmars-d-learn
mailing list