GCC implements for both C and C++ a syntactic extension to implement the
primary: "__builtin_offsetof" "("
typename"," offsetof_member_designator ")" offsetof_member_designator:
identifier| offsetof_member_designator "."
identifier| offsetof_member_designator "["
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.