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.

Reply via email to