On Tuesday, 3 October 2023 at 18:29:49 UTC, Salih Dincer wrote:
More importantly, is there a priority order? Because in our last example, when we leave a single overload, all features are executed through the ref opIndex except the bit:

The spec says:

If an index expression can be rewritten using `opIndexAssign` or `opIndexOpAssign`, those are preferred over `opIndex`.

Source: https://dlang.org/spec/operatoroverloading.html#array

So, the more specialized overloads are tried first, and the more general `opIndex` is tried last.

The only thing that's unclear here is the meaning of "can be rewritten"--as we've seen, the compiler only checks whether the specialized function *exists*, not whether it actually *works*, and will sometimes perform rewrites even when the resulting code does not compile.

Reply via email to