Usual arithmetic conversions - cppreference.com
Many binary operators that expect operands of arithmetic or enumeration type cause conversions and yield result types in a similar way. The purpose is to yield a common type, which is also the type of the result. This pattern is called the usual arithmetic conversions. Usual arithmetic conversions are defined as follows: Applies lvalue-to-rvalue conversion to both operands, the resulting prvalues are used in place of the original operands for the remaining process. Both operands are converted to a common type C. Given the types T1 and T2 as the promoted type (under the rules of integral promotions) of the operands, the following rules are applied to determine C: If one operand is of enumeration type and the other operand is of a different enumeration type or a floating-point type, this behavior is deprecated. Every integer type has an integer conversion rank defined as follows: The integer conversion rank is also used in the definition of integral promotion. Every floating-point type h