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

Кстати, больше нет POD.
Требуется
Standard Layout, что может быть и достаточным.
https://en.cppreference.com/w/cpp/types/offsetof