forward range properties with alias this - how?
Ivan Kazmenko via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Jul 29 17:13:39 PDT 2015
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.
More information about the Digitalmars-d-learn
mailing list