Я сейчас портирую большую кучу кода из конца 90-х, в которой очень многое завязано на offsetof() на не-POD типах. Код изначально для MSVC 98.
Согласно стандарту это UB, но ведь есть законы, а есть правоприменительная практика.
Как на практике обстоят дела? Мои целевые компиляторы это современный MSVC и clang под x86_64 и ARM.