Предыдущие ораторы (
@batChar @gleb_kudr ) говорили про адресацию памяти. Я думаю, что они неправы: у нас, например, есть битовые поля, которые, по определению, могут быть отдельными битами, не смотря на то, что "байт - минимальная единица адресации в памяти". Невозможность адресовать отдельные биты памяти -- не основная причина.
Проблема не в адресации, а скорее в стандарте: если посмотреть определение оператора sizeof (ISO/IEC 14882:1998, п.5.3.3), то стандарт запрещает применять его к битовым полям, но разрешает к типу bool (говоря, что результат, кстати, не обязан быть равен 1). А поскольку sizeof возвращает размер объекта в байтах, а конеченые объекты должны иметь ненулевой размер, то и размер bool должен быть не меньше байта.
Я думаю, что стандарт вполне мог бы запретить применять sizeof к bool и разрешить паковать значения bool, но не сделал этого, т.к. это, скорее всего, неэффективно.
С другой стороны, у std::vector есть специализация std::vector<bool>, "булевский вектор", которая обычно требует меньше памяти, чем массив значений типа bool.