6.50 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.