[conv.prom]

# 7 Expressions [[expr]](./#expr)

## 7.3 Standard conversions [[conv]](conv#prom)

### 7.3.7 Integral promotions [conv.prom]

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/expressions.tex#L853)

For the purposes of [conv.prom],
a [*converted bit-field*](#def:bit-field,converted "7.3.7 Integral promotions [conv.prom]") is a prvalue that is the result of
an lvalue-to-rvalue conversion ([[conv.lval]](conv.lval "7.3.2 Lvalue-to-rvalue conversion")) applied to
a bit-field ([[class.bit]](class.bit "11.4.10 Bit-fields"))[.](#1.sentence-1)

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/expressions.tex#L859)

A prvalue that is not a converted bit-field and has an integer type other thanbool, char8_t, char16_t,char32_t, or wchar_t whose integer conversion
rank ([[conv.rank]](conv.rank "6.9.6 Conversion ranks")) 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[.](#2.sentence-1)

[3](#3)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/expressions.tex#L869)

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]](dcl.enum "9.8.1 Enumeration declarations")): int,unsigned int, long int, unsigned long int,long long int, or unsigned long long int[.](#3.sentence-1)

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]](conv.rank "6.9.6 Conversion ranks")) greater than the rank of long long in which all the values of the enumeration can be represented[.](#3.sentence-2)

If there are
two such extended types, the signed one is chosen[.](#3.sentence-3)

[4](#4)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/expressions.tex#L882)

A prvalue of an unscoped enumeration type whose underlying type is
fixed ([[dcl.enum]](dcl.enum "9.8.1 Enumeration declarations")) can be converted to a prvalue of its underlying type[.](#4.sentence-1)

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[.](#4.sentence-2)

[*Note [1](#note-1)*:

A converted bit-field of enumeration type is treated as
any other value of that type for promotion purposes[.](#4.sentence-3)

â *end note*]

[5](#5)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/expressions.tex#L893)

A converted bit-field of integral type 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 tounsigned int if unsigned int can represent all the
values of the bit-field[.](#5.sentence-1)

[6](#6)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/expressions.tex#L900)

A prvalue of typechar8_t, char16_t, char32_t, orwchar_t ([[basic.fundamental]](basic.fundamental "6.9.2 Fundamental types"))
(including a converted bit-field that was not
already promoted to int or unsigned int according to the rules above)
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,unsigned long long int, or
its underlying type[.](#6.sentence-1)

[7](#7)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/expressions.tex#L921)

A prvalue of type bool can be converted to a prvalue of typeint, with false becoming zero and true becoming
one[.](#7.sentence-1)

[8](#8)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/expressions.tex#L927)

These conversions are called [*integral promotions*](#def:integral_promotion "7.3.7 Integral promotions [conv.prom]")[.](#8.sentence-1)
