digitalmars.D.bugs - [Issue 19015] New: arr[i..i] = c doesn't lower to a.opIndexAssign(c,
- d-bugmail puremagic.com (45/47) Jun 22 2018 https://issues.dlang.org/show_bug.cgi?id=19015
https://issues.dlang.org/show_bug.cgi?id=19015 Issue ID: 19015 Summary: arr[i..i] = c doesn't lower to a.opIndexAssign(c, a.opSlice(i, j)) Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: normal Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: greensunny12 gmail.com According to the docs (https://dlang.org/spec/operatoroverloading.html#slice_assignment_operator), this should work as:Expressions of the form a[i..j] = c are rewritten as a.opIndexAssign(c, a.opSlice(i, j)), and a[] = c as a.opIndexAssign(c).--- struct Foo { int payload; auto ref opSlice(size_t start, size_t end) { return this; } auto opIndexAssign(T)(T elem, Foo foo) { pragma(msg, "opIndexAssign"); return this; } } void main(string[] args) { Foo foo; pragma(msg, typeof(foo[0..2])); foo[0..2] = 3; } --- However, it fails withtest.d(20): Error: cannot implicitly convert expression 3 of type int to FooAFAICT there's no reason why this lowering should fail (and at the very least, the error message needs to be improved). As a workaround the legacy opSliceAssign can be used and looking at Phobos only opSliceAssign is used and there's no use of this specific newer opIndexAssign lowering. --
Jun 22 2018