On 08.02.20 00:10, nullptr wrote:
```
import std;

struct SomeRange
{
     int[3] val;

     enum empty = false;

     auto popFront() @safe {}

     ref auto front() @safe
     {
         return val;
     }
}

void main() @safe
{
     SomeRange().take(10).map!((return ref x) => x[]).joiner.writeln;
}
```

I don't know how applicable this is to your use case, but this code will compile and run under -dip1000.

That shouldn't compile. You have found a hole in DIP 1000.

----
struct SomeRange
{
    int[3] val = [10, 20, 30];
    ref auto front() @safe { return val; }
}

int[] f() @safe
{
    SomeRange sr;
//     return sr.val[]; /* error, as expected */
    return sr.front[]; /* no error, but escapes reference to local */
}

void main() @safe
{
    auto x = f();
    import std.stdio;
    writeln(x); /* Prints garbage. */
}
----

I'm too lazy right now to check if it's already in Bugzilla.

Reply via email to