哎呀...
问题在于结构是非 POD,因为 T 类型是非 POD。这是来自 GCC 手册的引用...
-Wno-invalid-offsetof(仅限 C++ 和 Objective-C++)
禁止将“offsetof”宏应用于非 POD 类型的警告。
根据 1998 ISO C++ 标准,将“offsetof”应用于非 POD 类型是未定义的。然而,在现有的 C++ 实现中,“offsetof”通常会给出有意义的结果,即使应用于某些类型的非 POD 类型也是如此。(例如一个简单的 'struct' 仅由于具有构造函数而不能成为 POD 类型。)此标志适用于意识到他们正在编写不可移植代码并且故意选择忽略有关它的警告的用户。
在 C++ 标准的未来版本中,对 'offsetof' 的限制可能会放宽。
我的问题是我几乎所有的 T 类型都有构造函数,因此被归类为非 POD。我之前忽略了这一点,因为它无关紧要——当然,原则上它应该与 offsetof 无关。问题是 C++ 标准使用一个 POD 与非 POD 分类,即使有许多不同的方式可以成为非 POD,并且编译器默认警告不符合标准的使用是正确的。
我目前的解决方案将是上面的选项来抑制警告 - 现在我只需要弄清楚如何告诉 cmake 使用它。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/13997.html