Flatten a range of static arrays
    ag0aep6g 
    anonymous at example.com
       
    Fri Feb  7 23:30:28 UTC 2020
    
    
  
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.
    
    
More information about the Digitalmars-d-learn
mailing list