deed:

auto mappedThenSorted = mapped.sort();           // Error
auto mappedThenSorted = mapped.array.sort(); // Works (and used in examples)


What am I missing in the documentation?

When you try to sort mapped, the D compiler spits out a error message that shows the complex template constraint of sort. You are calling sort using the default unstable algorithm.

Here I show the requirements for the unstable sort:


import std.algorithm, std.array, std.range;

void main() {
    int[] data = [2, 0, 1];

    auto mapped = data.map!q{a * 10};
    alias R = typeof(mapped);

    pragma(msg, hasSwappableElements!R);
    pragma(msg, hasAssignableElements!R);
    pragma(msg, isRandomAccessRange!R);
    pragma(msg, hasSlicing!R);
    pragma(msg, hasLength!R);

//    auto r1 = mapped.sort();       // Error
//    auto r2 = mapped.array.sort(); // OK
}


It prints:

false
false
true
true
true

Elements generated by a map can't be back-assigned.


To help D programmers understand such situations I have asked for this:
http://d.puremagic.com/issues/show_bug.cgi?id=9626

Bye,
bearophile

Reply via email to