Здравствуйте, LuciferSaratov, Вы писали:
LS>Я сейчас портирую большую кучу кода из конца 90-х, в которой очень многое завязано на offsetof() на не-POD типах. Код изначально для MSVC 98.
LS>Согласно стандарту это UB, но ведь есть законы, а есть правоприменительная практика.
LS>Как на практике обстоят дела? Мои целевые компиляторы это современный MSVC и clang под x86_64 и ARM.
А вы чего хотели в C++ даже операция сложения в общем случае это UB.
offsetof будет UB если у вас виртульное наследование используется, в остальных случаях проблем не должно быть. Если только особо одарённые стандартописатели не заложат основу для каких-нибудь новых чудо оптимизаций.
Так что просто используйте и пишите тесты, которые проверяют что оно всё еще работает как задумано