С++ 17 вводит тип std::byte
. Тип библиотеки, который может (предположительно) использоваться для доступа к необработанной памяти, но стоит отдельно от типов символов и представляет собой простой кусок бит.
Пока все хорошо. Но определение меня слегка волнует. Как указано в [cstddef.syn]:
enum class byte : unsigned char {};
Я видел два ответа на SO, которые, по-видимому, подразумевают разные вещи о надежности вышеупомянутого. Этот ответ утверждает (без ссылки), что перечисление с базовым типом имеет те же требования к размеру и выравниванию, что и указанный тип. Интуитивно это кажется правильным, поскольку указание базового типа допускает непрозрачные объявления перечисления.
Однако этот ответ утверждает, что стандарт гарантирует, что две перечисления с одним и тем же базовым типом совместимы с макетом и не более.
При чтении [dcl.enum] Я не мог не заметить, что действительно, базовый тип используется только для определения диапазона перечисления. Нет упоминаний о требованиях к размеру или выравниванию.
Что мне не хватает?