On Sunday, 8 March 2015 at 21:34:25 UTC, Dennis Ritchie wrote:
This is normal behavior?

import std.stdio;
import std.algorithm;

void main() {

        auto a = [3, 5, 8];

        writeln(find(remove(a, 1), 5).length != 0);     // prints false
        writeln(a);             // prints [3, 8, 8] ???
}

Yes, works as designed. `remove` writes over removed slots and returns shrunk (shrinked?) slice. It does not shrink the range at the call site. To update `a`, write the result of `remove` to it:

writeln(find(a = remove(a, 1), 5).length != 0); // still false
writeln(a); // prints [3, 8]

Reply via email to