7 Standard conversions [conv]

7.6 Integral promotions [conv.prom]

Prvalue целого числа типа, кроме bool, char16_­t, char32_­t, или wchar_­t чей integer conversion rank меньше , чем ранг int может быть преобразованы в prvalue типа , int если int можно представить все значения типа источника; в противном случае исходное prvalue может быть преобразовано в prvalue типа unsigned int.

Prvalue типа char16_­t, char32_­tили wchar_­t ([basic.fundamental]) может быть преобразовано в prvalue первого из следующих типов , которые могут представлять все значения его базового типа: int, unsigned int, long int, unsigned long int, long long int, или unsigned long long int. Если ни один из типов в этом списке не может представлять все значения его базового типа, а prvalue типа char16_­t, char32_­tили wchar_­t может быть преобразовано в prvalue его базового типа.

Prvalue типа перечисления с незаданной областью, базовый тип которого не fixed ([dcl.enum]), может быть преобразован в prvalue первого из следующих типов, который может представлять все значения перечисления (т. Е. Значения в диапазоне bmin до, bmax как описано в [dcl.enum]) : int, unsigned int, long int, unsigned long int, long long int, или unsigned long long int. Если ни один из типов в этом списке не может представлять все значения перечисления, prvalue типа перечисления с незаданной областью может быть преобразовано в prvalue расширенного целочисленного типа с наименьшим integer conversion rank выше, чем ранг, long long в котором все значения перечисления могут быть представлены. Если таких расширенных типов два, выбирается подписанный.

Prvalue типа перечисления с незаданной областью, базовый тип которого fixed ([dcl.enum]), может быть преобразован в prvalue его базового типа. Более того, если интегральное продвижение может быть применено к его базовому типу, prvalue типа перечисления с незаданной областью, базовый тип которого фиксирован, также может быть преобразован в prvalue продвинутого базового типа.

Prvalue для интеграла bit-field может быть преобразовано в prvalue типа, int если int может представлять все значения битового поля; в противном случае он может быть преобразован в unsigned int if, который unsigned int может представлять все значения битового поля. Если битовое поле еще больше, к нему не применяется интегральное продвижение. Если битовое поле имеет перечислимый тип, оно рассматривается как любое другое значение этого типа в целях продвижения.

Prvalue типа bool может быть преобразован в prvalue типа int, false становясь равным нулю и равным true единице.

Эти преобразования называются integral promotions.