On 10/3/23 12:09 PM, Paul Backus wrote:
On Tuesday, 3 October 2023 at 13:07:00 UTC, Steven Schveighoffer wrote:

Now, you can define a further `opIndexAssign(T val, size_t idx)`. However, now you lose capabilities like `a[0]++`, which I don't think has a possibility of implementing using an `opIndex` operator, and it would be pretty ugly if you had to.

Works for me, with both `++` and `+=`: https://run.dlang.io/is/JckTVG

AST output confirms that these are lowered to use `opIndex`.

Looking at the spec, it seems like `opIndex` would only be pre-empted here if you overloaded `opIndexUnary` (for `++`) and/or `opIndexOpAssign` (for `+=`).

OK, so it's not as bad as I thought, but surely the compiler should recognize that `opIndexAssign(val, idx)` doesn't work, but `opIndex(idx) = val` does?

-Steve

Reply via email to