Определяется ли sizeof (bool) в стандарте языка C++?

Я не могу найти ответ в стандартной документации. Требует ли стандарт языка C++, чтобы sizeof(bool) всегда был 1 (для 1 байта), или этот размер определяется реализацией?

Ответ 1

sizeof(bool) определяется реализацией, и стандарт подчеркивает этот факт.

§5.3.3/1, сокращенно:

sizeof(char), sizeof(signed char) со sizeof(unsigned char) sizeof(signed char) и sizeof(unsigned char) равны 1; результат sizeof примененного к любому другому фундаментальному типу, определяется реализацией. [Примечание: в частности, sizeof(bool) и sizeof(wchar_t) определяются реализацией. 69) ]

Сноска 69):

sizeof(bool) не обязательно должен быть 1.

Ответ 2

http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx

"В Visual С++ 4.2 файлы заголовков Standard С++ содержали typedef, который приравнивал bool к int. В Visual С++ 5.0 и более поздних версиях bool реализован как встроенный тип размером 1 байт. что для Visual С++ 4.2 вызов sizeof (bool) дает 4, тогда как в Visual С++ 5.0 и более поздних версиях один и тот же вызов дает 1. Это может вызвать проблемы с повреждением памяти, если вы определили элементы структуры типа bool в Visual С++ 4.2 и являются микширование объектных файлов (OBJ) и/или DLL, построенных с помощью компиляторов 4.2 и 5.0 или более поздних версий."

Ответ 3

Определена реализация. Только sizeof(char) по стандарту 1.

Ответ 4

См. пункт 5.3.3 пункта 1:

[Примечание: в частности, sizeof (bool) и sizeof (wchar_t) являются определенная реализация .69)]