improve operator overloading with number-like types