Why is sizeof(bool) not defined to be one by the C++ standard?
boolean, c++, language-design, sizeof, standards
Solution
Many platforms cannot effectively load values smaller than 32 bits. They have to load 32 bits, and use a shift-and-mask operation to extract 8 bits. You wouldn't want this for single `bool`s, but it's OK for strings.
Problem
Size of `char`, `signed char` and `unsigned char` is defined to be 1 byte, by the C++ Standard itself. I'm wondering why it didn't define the `sizeof(bool)` also? C++03 Standard $5.3.3/1 says, sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1; the result of sizeof applied to any other fundamental type (3.9.1) is implementation-defined. [Note: in particular,sizeof(bool) and sizeof(wchar_t) are implementation-defined.69) I understand the rationale that sizeof(bool) cannot be less than one byte. But is there any rationale why it should be greater than 1 byte either? I'm not saying that implementations define it to be greater than 1, but the Standard left it to be defined by implementation as if it may be greater than 1. If there is no reason `sizeof(bool)` to be greater than 1, then I don't understand why the Standard didn't define it as just `1 byte`, as it has defined `sizeof(char)`, and it's all variants.