If either operand is of scoped enumeration type, no conversions
are performed; if the other operand does not have the same type, the expression is
ill-formed.
Otherwise, if the floating-point conversion ranks ([conv.rank]) of
the types of the operands are ordered but not equal,
then the operand of the type with the lesser floating-point conversion rank
is converted to the type of the other operand.
Otherwise, if the floating-point conversion ranks of the types of
the operands are equal,
then the operand with the lesser floating-point conversion subrank ([conv.rank])
is converted to the type of the other operand.
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 ([depr.arith.conv.enum]).