Question: what are the rules for operator overloading?
Answer:  Only built-in operators can be overloaded. ... 
 Arity of the operators cannot be changed.
 Precedence and associativity of the operators cannot be changed.
 Overloaded operators cannot have default arguments except the function call operator () which can have default arguments.