The trouble generally starts when your operators get side effects. I.e. C++ overloads the [] operator to implement dynamic arrays. Then writing down a [] might have unforseen memory management effects. In the same way using <<and>> for standard i/o is a bad idea. Overloading operators to implement matrices, complex numbers, etc. is generally trouble free.