README
"Значение ловушки" или "представление ловушки" для типаTпредставляет собой битовую комбинацию (базового хранилища), которая дает недопустимое значениеT.Попытка интерпретировать представление недопустимого значения вызовет undefined поведение.
Пусть начнется битва.
Другой вопрос начал горячую дискуссию относительно char и возможность реализации с ловушками для него.
Вопрос
- Может ли
charиметь значения ловушки?
Цитаты, упомянутые в предыдущем обсуждении:
Эти разделы являются наиболее цитируемыми во время предыдущей аргументации, противоречат ли они?
3.9.1p1Основные типы[basic.fundamental]Определяется реализацией, может ли
charиспользовать отрицательные значения. Символы могут быть явно объявленыsignedилиunsigned.A
char,asigned char,и aunsigned charзанимают одинаковое количество хранения и имеют одинаковые требования к выравниванию (3.11); то есть они имеют одно и то же представление объекта. Для типов символов в представлении значений участвуют все биты представления объекта.Для неподписанных типов символов все возможные битовые шаблоны представления значений представляют числа. Эти требования не подходят для других типов.
В любой конкретной реализации простой объект
charможет принимать те же значения, что и тегsigned charилиunsigned char;, который определяется реализацией.
3.9p2 Типы
[basic.types]Для любого объекта (кроме субобъекта базового класса) тривиально-скопируемого типа
T,, имеет ли объект допустимое значение типаT, базовые байты (1.7), составляющие объект, могут быть скопированы в массивcharилиunsigned char.Если содержимое массива
charилиunsigned charбудет скопировано обратно в объект, объект впоследствии сохранит свое исходное значение.