On 03/09/2016 06:50 PM, rcorre wrote:

> sort calls to quicksort (for unstable, at least) which uses
> swapAt. swapAt takes the range by value, so it just swaps the values in
> its local copy.

Remembering that a range is not the collection, swapAt takes the range by value but it does not copy the elements. So, sort() does sort the original array:

import std.algorithm;

void main() {
    auto a = [ 9, -1, 2, 0 ];
    a.sort();
    assert(a == [ -1, 0, 2, 9 ]);
}

> The original OnlyResult is untouched. I guess a static
> array slice maintains a pointer to the underlying array (which is why
> returning one from a function errors with 'escaping reference to local
> variable').

Yes: A static array is just a collection of elements, which implicitly converts to a slice and a slice is nothing but a pair of "pointer to the first element" and "number of elements".

Ali

Reply via email to