Макрос 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& перегружен для любого из задействованных типов.