Re: offsetof() без UB
От: _NN_  
Дата: 24.03.25 08:51
Оценка:
Здравствуйте, 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
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.