I'm curious about some of the behavior of the builtin bool
type in C++. As I understand it, std::common_type
determines the common type using implicit convertibility. I would expect that an expression with bool
and another type would cause bool to convert to that type. For instance, I can see that bool + float
-> float
and bool + double
-> double
. However, bool + int8_t
-> int32_t
and bool + int16_t
-> int32_t
. Why is this the case?
Short answer: integral promotion.
In numerical arithmetic, small integral types (including bool
, char
, unsigned char
, signed char
, short
, unsigned short
, etc) are promoted to int
if all the possible values fit in int
, otherwise they are promoted to unsigned int
.
On most machines today, int32_t
is the same as int
. In the case of bool + int8_t
or bool + int16_t
, both are promoted to int
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With