Hello Dear community.

I'd like to overload `opIndexAssign` for a struct which wraps around a generic array (so that it can't support `opIndex` due to unknown return type).

Broken down as much as possible this is the code:

```
import std.stdio : writeln;
import std.range : ElementType;

struct S {
        void opIndexAssign(X, RANGE)(X x, RANGE range)
                if (is(ElementType!RANGE : size_t))
        {
                writeln(__FUNCTION__);
        }

        auto opSlice(size_t start, size_t end) {
                import std.range : iota;
                return iota(start, end);
        }
}

void main()
{
        auto arr = new int[7];

        S s;
        s.opIndexAssign(arr, s.opSlice(1,4));  // works
s[0..3] = arr[1..4]; // does not work, compiles to `s.opSlice(0,3) = arr[1..4]`
}
```

I'm clueless about why it wouldn't compile the last statement to `s.opIndexAssign(arr[1..4], s.opSlice(0,3))`.

Help appreciated :-)

Reply via email to