10

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?

Yu Hao
  • 119,891
  • 44
  • 235
  • 294
user2333829
  • 1,301
  • 1
  • 15
  • 25

1 Answers1

10

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.

Yu Hao
  • 119,891
  • 44
  • 235
  • 294