C++ Operator Overloading rules