A prvalue of an integer type other than bool, char8_t, char16_t,
char32_t, or wchar_t whose integer conversion
rank ([conv.rank]) is less than the rank of int can be
converted to a prvalue of type int if int can represent
all the values of the source type; otherwise, the source prvalue can be
converted to a prvalue of type unsigned int.

A prvalue of type char8_t, char16_t, char32_t, or
wchar_t ([basic.fundamental]) can be converted to a prvalue
of the first of the following types that can represent all the values of
its underlying type: int, unsigned int, long int,
unsigned long int, long long int,
or unsigned long long int.

If none of the types in that list can
represent all the values of its underlying type, a prvalue of type
char8_t, char16_t, char32_t, or wchar_t can be converted
to a prvalue of its underlying type.

A prvalue of an unscoped enumeration type whose underlying type is not
fixed can be converted to a prvalue of the first of the following
types that can represent all the values of the enumeration ([dcl.enum]): int,
unsigned int, long int, unsigned long int,
long long int, or unsigned long long int.

If none of the types in that
list can represent all the values of the enumeration, a prvalue of an unscoped
enumeration type can be converted to a prvalue of the extended integer type with lowest
integer conversion rank ([conv.rank]) greater than the rank of long long
in which all the values of the enumeration can be represented.

If there are
two such extended types, the signed one is chosen.

A prvalue of an unscoped enumeration type whose underlying type is
fixed ([dcl.enum]) can be converted to a prvalue of its underlying type.

Moreover,
if integral promotion can be applied to its underlying type, a prvalue of an unscoped
enumeration type whose underlying type is fixed can also be converted to a prvalue of
the promoted underlying type.

A prvalue for an integral bit-field ([class.bit]) can be converted
to a prvalue of type int if int can represent all the
values of the bit-field; otherwise, it can be converted to
unsigned int if unsigned int can represent all the
values of the bit-field.

If the bit-field is larger yet, no integral
promotion applies to it.

If the bit-field has enumeration type, it is
treated as any other value of that type for promotion purposes.

A prvalue of type bool can be converted to a prvalue of type
int, with false becoming zero and true becoming
one.