Why does BinaryHeap sometime cause compile-error in foeach?
user1234
user1234 at 12.lo
Sat Sep 30 09:55:34 UTC 2017
On Saturday, 30 September 2017 at 09:27:23 UTC, Shigeki Karita
wrote:
> https://dpaste.dzfl.pl/cd605899d050
>
> why this code cannot convert to foreach (over Structs and
> Classes with Ranges).
>
> auto h = new BinaryHeap!(int[])(new int[0]);
> typeof(h).stringof.writeln;
> static assert(isInputRange!(typeof(h)));
> h.insert(3);
> h.insert(1);
> h.insert(2);
> // Error: invalid foreach aggregate `h`
> // foreach (e; h) e.writeln;
> for (; !h.empty; h.popFront()) {
> auto e = h.front();
> e.writeln;
> }
>
>
> https://dlang.org/spec/statement.html#foreach-with-ranges
The reason why it doesn't work is much more simple than you
think: h is not a BinaryHeap, it's a pointer to.
Try "foreach (e; *h) e.writeln;" and it works.
More information about the Digitalmars-d-learn
mailing list