I beg to differ: it IS bad. Because when you read a+b, you have NO idea what may be happening
I beg to differ with you!
If you see the function add(a, b), you have NO idea what may be happening. And this applies to ALL the functions. In C++ a+b simply means operator+ IOW it's a function with a funny syntax just like any other.
Not true. In C, if I see "a+b", I generally know that I'm getting the time-tested and well understood behavior of the compiler adding two numbers together. If I see "add(a,b)", I know that something more complex may be happening, and that if I need to know more, I should go look up the source or documentation for the add(x, y) function.
I understand the potential readability benefit of operator overloading, but I've never liked the cost of making known compiler behavior ambiguous.