https://issues.dlang.org/show_bug.cgi?id=14648
Walter Bright <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |[email protected] --- Comment #1 from Walter Bright <[email protected]> --- The code in question: // rdmd -unittest -main -dip25 dip25.d private struct Container { this(int c) @safe { arr = new int[](c); arr[] = c; } ~this() @safe { arr[] = -1; } ref Range opSlice() return @safe // remove "return" and this code correctly fails to compile { r.index = 0; r.c = &this; return r; } @safe struct Range { int front() { return c.arr[index]; } bool empty() { return index >= c.arr.length; } void popFront() { index++; } size_t index; Container* c; } private: Range r; int[] arr; } private struct S { void takesContainer(ref Container c) @safe { this.r = c[]; } void print() @safe { import std.stdio:writeln; writeln(r); } Container.Range r; } void doStuff(ref S s) @safe { auto c = Container(20); s.takesContainer(c); } @safe unittest { S s; doStuff(s); s.print(); } --
