Support for offsetof
GCC implements for both C and C++ a syntactic extension to implement the offsetof macro.
primary:
"__builtin_offsetof" "(" ``typename`` "," offsetof_member_designator ")"
offsetof_member_designator:
``identifier``
| offsetof_member_designator "." ``identifier``
| offsetof_member_designator "[" ``expr`` "]"
This extension is sufficient such that
#define offsetof(``type``, ``member``) __builtin_offsetof (``type``, ``member``)
is a suitable definition of the offsetof macro. In C++, type may be dependent. In either case, member may consist of a single identifier, or a sequence of member accesses and array references.