A prvalue of an integer type other than
bool,
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.