A prvalue of an integer type can be converted to a prvalue of another
integer type.

A prvalue of an unscoped enumeration type can be converted to
a prvalue of an integer type.

If the destination type is unsigned, the resulting value is the least
unsigned integer congruent to the source integer (modulo where n
is the number of bits used to represent the unsigned type).

If the destination type is signed, the value is unchanged if it can be
represented in the destination type; otherwise,
the value is implementation-defined.

If the
source type is bool, the value false is converted to
zero and the value true is converted to one.