Есть ли способ реализовать offsetof для типов без POD без UB?

Для типа T и его переменной-члена m самой простой формой offsetof (T, m) будет

&static_cast<T*>(0)->m

хотя это явно UB. Есть ли способ сделать то же самое, не задействуя UB, если предположить, что T является POD или не POD, но нет виртуального наследования? Или, альтернативно, есть ли способ обеспечить во время компиляции, чтобы при текущей реализации (с помощью которой код компилировался) выражение гарантированно оценивалось до правильного значения?

На данный момент я использую приведенное выше выражение без каких-либо проблем в текущих версиях GCC, Clang и Visual C ++, но ему угрожает Undefined Behavior Sanitizer GCC, который недавно был применен в нашей кодовой базе.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]