On Wednesday, 29 July 2015 at 23:54:29 UTC, Ivan Kazmenko wrote:
On Wednesday, 29 July 2015 at 12:25:14 UTC, Marc Schütz wrote:
On Tuesday, 28 July 2015 at 21:25:23 UTC, Ivan Kazmenko wrote:
...

Perhaps I still don't implement save() correctly.
The line
    @property auto save() {return S(contents.dup);}
was meant to be just:
    @property auto save() {return S(contents);}
But with either of them, I get an error when trying a function using save.

-----
import std.algorithm, std.range, std.stdio;
struct S {
    int[] contents;
    alias contents this;
    @property auto save() {return S(contents);}
auto opSlice(size_t lo, size_t hi) {return S(contents[lo..hi]);}
}
void main() {
    S s;
    s = [4, 3, 2, 1];
    nextPermutation(s);
}
-----

The error is:
-----
sorting.d(2460): Warning: use std.algorithm.reverse instead of .reverse property sorting.d(2460): Error: function expected before (), not _adReverse(range.contents, 4u) of type int[]
-----

So, is something wrong with my save()?

Anyway, I reckon nextPermutation itself is wrong and should use
        reverse(range);
instead of
        range.reverse();
as it does ten lines later:
https://github.com/D-Programming-Language/phobos/blob/30e4ff1717d6d3eb82d2cb0e00a3c07af4263a7b/std/algorithm/sorting.d#L2468-L2478

If anybody can confirm that, I can file an issue and a patch.

Reply via email to