Для типа T и его переменной-члена m самой простой формой offsetof (T, m) будет
&static_cast<T*>(0)->m
хотя это явно UB. Есть ли способ сделать то же самое, не задействуя UB, если предположить, что T является POD или не POD, но нет виртуального наследования? Или, альтернативно, есть ли способ обеспечить во время компиляции, чтобы при текущей реализации (с помощью которой код компилировался) выражение гарантированно оценивалось до правильного значения?
На данный момент я использую приведенное выше выражение без каких-либо проблем в текущих версиях GCC, Clang и Visual C ++, но ему угрожает Undefined Behavior Sanitizer GCC, который недавно был применен в нашей кодовой базе.
Задача ещё не решена.
Других решений пока нет …