https://pastebin.com/BYcRN8T2

why called copy constructor for ref Range struct type in foreach ?

```
struct MyRange {
    private int current_row = 0;
    private int rows_count = 5;
    @disable this(this); // <===
    bool empty () { return current_row == rows_count; }
    int front() { return current_row*current_row; }
    void popFront() { ++current_row; }
}

struct Container {
    @disable this(this); // <===
    int opApply(int delegate(int) dg) {
        foreach (int row; 0..5) dg(row*row);
        return 1;
    }
}

void foreach_iterable(Type)(ref Type iterable) {
    import std.stdio: writeln;
foreach (int row_value; iterable) { // test_range.d(20): Error: struct test_range.MyRange is not copyable because it is annotated with @disable
        row_value.writeln;
    }
}

void call_iterable(Type)() {
    Type iterable;
    foreach_iterable(iterable);
}

void main() {
    call_iterable!Container(); // work
    call_iterable!MyRange(); // does`t work
}
```

ldc2 version: version   1.8.0 (DMD v2.078.3, LLVM 5.0.1)


Reply via email to