On Wednesday, 25 February 2015 at 09:07:17 UTC, Tobias Pankrath
wrote:
import std.container;
import std.stdio;
void main()
{
DList!int list;
Array!(DList!int.Range) stack;
foreach(i; 0 .. 4)
{
list.stableInsertBack(i);
stack.insertBack(list[]);
}
writefln("list: %s", list[]); // fine
writefln("stack: %s", stack[]); //fine
foreach(s; stack[])
writefln("s: %s", s); // all s are empty?
writefln("stack: %s", stack[]); //not fine
}
It prints:
list: [0, 1, 2, 3]
stack: [[0], [0, 1], [0, 1, 2], [0, 1, 2, 3]]
s: []
s: []
s: []
s: []
stack: [[], [], [], []]
Ranges aren't containers. It's more like a view of a container
that gets smaller (or empty) the more you use it. There might not
be a container behind a range.