有没有办法在没有UB的情况下为非POD类型实现offsetof?

时间:2017-09-15 10:36:46

标签: c++ language-lawyer undefined-behavior offsetof

对于类型T及其成员变量m,offsetof(T,m)的最简单形式将是

&static_cast<T*>(0)->m
虽然很明显是UB。有没有办法在不涉及UB的情况下做同样的事情,假设T是POD或非POD但是没有虚拟继承?或者,有没有办法确保在编译时在当前实现(编译代码)下保证表达式被计算为正确的值?

目前我在GCC,Clang和Visual C ++的当前版本中使用上述表达式没有任何问题,但它正受到GCC的Undefined Behavior Sanitizer的威胁,该程序最近在我们的代码库。

0 个答案:

没有答案