On Tue, 25 Oct 2011 06:13:09 -0400, simendsjo <simend...@gmail.com> wrote:

On 25.10.2011 11:51, bearophile wrote:
maarten van damme:

import std.algorithm;
struct Loc {
uint row;
uint col;
}
void main(){
Loc[] testArray;
Loc a={3,2};
Loc b={5,3};
testArray~=a;
testArray~=b;
remove(testArray,a);
}
gives the same error

The second argument of remove() needs to be an index, a size_t.

This works:

import std.stdio, std.algorithm;
struct Loc {
     uint row, col;
}
void main() {
     auto a = Loc(3, 2),
          b = Loc(5, 3);
     auto data = [a, b];
     writeln(remove(data, 0));
     writeln(data);
}


It prints:
[Loc(5, 3)]
[Loc(5, 3), Loc(5, 3)]

So curiously remove() doesn't work in-place, I think this is a bug or a design bug.

Bye,
bearophile

Yes, probably a bug. This example from the documentation fails:
import std.stdio, std.algorithm;
void main() {
     int[] a = [ 0, 1, 2, 3 ];
     assert(remove!(SwapStrategy.unstable)(a, 1) == [ 0, 3, 2 ]);
}

Most certainly this is a bug. Here is the resulting array and final state of a:
import std.stdio, std.algorithm;
void main() {
    int[] a = [ 0, 1, 2, 3 ];
    writeln( remove!(SwapStrategy.unstable)(a, 1));
    writeln(a);
}

output:

[3, 1, 2]
[3, 1, 2, 3]

Clearly, index 0 was removed, not index 1.  Please file a bug.

-Steve

Reply via email to