But, this argument defeats itself. At least, in practice.
If I look at how 'operator overloading' is used in practice, _rarely_ do you get commutativity, or even anticommutativity, associativity, or distributivity.
Take list addition, where operator overloading often shows up:
someList += someElement
is shorthand for:
someList.add(someElement)
add is not commutative; the elements used in the operation aren't even the same type.
The point being, the manipulation and simplification that is, according to GvR, much easier to spot if operators are used aren't even relevant here.
If we're talking about, say, introducing a class 'Complex', representing complex numbers, and wishing that the language is such that one can add the ability to use mathematical operators here, observing that it is both [A] common in the domain of complex numbers to use, say, the symbol `+` to indicate addition, and [B] these properties of operations such as commutativity apply to many mathematical operations one might want to perform on complex numbers, I'd agree: Yeah, the language kinda sucks if you can't write `Complex(a, b) + Complex(c, d)`.
But how often does that actually occur?
Separately, if you go down this route, the abstraction should be as complete as it can be. Therefore, this:
`Complex(2, 3) + 5`
Should work, and should evaluate to `Complex(7, 3)`. But.. this:
`5 + Complex(2, 3)`
should also work. Which requires either scala's `implicit` system or python's take on this, involving `__rplus__`. These operations introduce their own complications.
Thus, the debate on operator overloading boils down, as language feature debates usually do, as a cost v. benefits analysis. The costs are heavy: There is a lot of proof out there that even experienced coders just insist on abusing operator overloading (or, to be a bit less judgemental: That opinions are rather divided on how they ought to be used, given the amount of complaints about `cout Are the benefits worth it? Possibly.
But I don't think GvR's article takes the cost side seriously, and the benefits stated, at least in my experience, tend not to apply at all there where op overloading tends to end up.