On Wednesday, 14 July 2021 at 17:42:03 UTC, Ali Çehreli wrote:
On 7/14/21 9:13 AM, Tejas wrote:
> ref/*notice this ref*/ int opIndex(int
index)return/*NOTICE THE
> RETURN*/ {
Indeed... I cover that 'ref' here:
http://ddili.org/ders/d.en/operator_overloading.html#ix_operator_overloading.return%20type,%20operator
Two quotes from that section:
1) "it is advisable to observe the return type of the same
operator on fundamental types."
NOTE: I agree that for that to make sense, one needs to know
the "return type" of fundamental type operations. It may not be
clear that ++i is a reference to 'i' ("i itself"):
void main() {
int i;
++i = 42;
assert(i == 42);
}
2) "With the exception of opAssign, it is recommended that the
operators that modify the object return the object itself.
[...] The return type is the type of the struct, marked by the
ref keyword to mean reference."
Ali
To be honest even the compiler error should have been a dead
giveaway that opIndex was returning a _constant_ value and the
```++``` operator can't operate on that... I should've taken the
diagnostic to heart and not just tried to brute force my way
through the problem.
Obviously, I retract my statement that this might be a compiler
bug.