This applies to C and C++.
Please don't assume that just because the standard says some things about a facility that the real world will fit exactly.
The `offsetof' facility is neat, but please don't use it everywhere as if it is a constant expression.
I was just asked to help "port" some code to a new compiler that uses `offsetof' to calculate static buffer sizes.
Most implementations of `offsetof' depend on pointer arithmetic which can't be used in a constant expression such as the side of a static buffer.
It is not just "home grown" implementations. The statement holds for many implementations that ship with compilers.
So again, please don't try to treat `offsetof' as a constant.