The general recommendation that I am familiar with is that as many operators as possible should be non-member friend functions so as to allow for implicit conversions.
Q2: C++ requires at least one type (excluding return type) in an operator overload to be a non-primitive type. You cannot change the behavior of the built in types.