21 Language support library [language.support]

21.2 Common definitions [support.types]

21.2.4 Sizes, alignments, and offsets [support.types.layout]

Макрос offsetof(type, member-designator) имеет ту же семантику, что и соответствующий макрос в заголовке стандартной библиотеки C <stddef.h>, но принимает ограниченный набор type аргументов в этом международном стандарте. Условно поддерживается использование offsetof макроса с type отличным от a standard-layout class.187 Выражение offsetof(type, member-designator) никогда не бывает, type-dependent и оно value-dependent тогда и только тогда, когда type является зависимым. Результат применения offsetof макроса к статическому элементу данных или члену функции не определен. Никакая операция, вызванная offsetof макросом, неnoexcept(offsetof(type, member-designator)) должна вызывать исключение true.

Тип ptrdiff_­t представляет собой определяемый реализацией целочисленный тип со знаком, который может содержать разницу двух нижних индексов в объекте массива, как описано в [expr.add].

Тип size_­t представляет собой определяемый реализацией целочисленный тип без знака, который достаточно велик, чтобы содержать размер в байтах любого объекта.

[ Note: Рекомендуется, чтобы реализации выбирали типы для ptrdiff_­t и size_­t , целое число conversion ranks которых не больше, чем у, signed long int если только больший размер не требуется для хранения всех возможных значений. ]end note

Тип max_­align_­t представляет собой POD-тип, требования к выравниванию которого не менее велики, чем требования любого скалярного типа, и чьи требования к выравниванию поддерживаются в каждом контексте.

Смотрите также: Alignment, Sizeof, Additive operators, Free store, и ISO C 7,19.

Обратите внимание, что offsetof требуется для работы, как указано, даже если унарный operator& перегружен для любого из задействованных типов.