Topic:
I'm ambivalent about operator overloading. I have always thought there should be serious consideration involved before one creates a local disambiguation of, most commonly, simple arithmetic operators. The extended "==" tends to be good, but that just goes into the second point: overloading an operator is essentially the same as writing a function/method, so why not just write a function/method? Neither design promotes readability of code as you still have to scroll through it to find the overloading or the method implementation at least once. And, in compiled code, it doesn't matter (I don't think so anyway; feel free to correct me on this).
On the other hand, operator overloading does promote heuristic readability. Programs that use vector math, or any kind of math, can look much more logical if the code looks closer to what you were taught in school. I can't count the number of times I exchanged 'pow' for '^', for example. If this is the case, however, then does my argument become "operator overloading is a nonessential feature preserved for the benefit of the programmer?"
I'd rather not the reason be that trivial if I can afford it.