Как отмечает @MSalters, некоторые платформы работают более эффективно с большими элементами данных.
Многим процессорам "RISC" (например, MIPS, PowerPC, ранним версиям Alpha) было / было значительно сложнее работать с данными размером менее одного слова, поэтому они делают то же самое. IIRC, по крайней мере с некоторыми компиляторами на Alpha a bool, фактически занимал 64 бита.
gcc для PowerPC Mac по умолчанию использовал 4 байта для bool, но имел переключатель, чтобы изменить его на один байт, если вы хотите.
Даже для x86 есть преимущество использования 32-битного элемента данных. gcc для x86 имеет (или, по крайней мере, раньше имел - я совсем недавно не смотрел) определение в одном из своих файлов конфигурации для BOOL_TYPE_SIZE
(исходя из памяти, так что я могу немного ошибочно назвать это имя) что вы можете установить значение 1 или 4, а затем повторно скомпилировать компилятор, чтобы получить bool такого размера.
Edit: По этой причине я бы сказал, что это простое отражение базовой философии C и C ++: оставьте для реализации как можно больше возможностей для оптимизации / настройки ее поведения. Требовать особого поведения только тогда, когда / если есть очевидное, ощутимое преимущество и вряд ли будут какие-либо серьезные обязательства, особенно если изменение усложнит поддержку C ++ на некоторой конкретной платформе (хотя, конечно, если платформа достаточно может быть проигнорировано).