为 std::optional 禁用警告 C4324 是否安全?

Is it safe to disable warning C4324 for std::optional?

我正在使用 flatbuffers - 一个序列化库。在该方案中,我定义了一个要与 std::optional 一起使用的结构。但在编译期间我收到警告 C4324。 据我了解,平面缓冲区对生成的结构使用自定义填充。 禁用警告是否安全?

警告信息是

warning C4324: 'std::_Optional_destruct_base<_Ty,true>::<unnamed-tag>': structure was padded due to alignment specifier

Visual Studio 2017,msvc 14.13.26128.

FlatBuffers 生成的 C++ 结构具有显式对齐和填充以确保它们与序列化数据格式匹配,而不是让编译器选择这些。

我猜测这里发生的是 std::optional 本质上是 { T t; bool is_present; },并且因为 T 需要特定对齐,父结构现在也需要它,并且bool 后面需要填充。

所以这可能是良性的,可能会被压制。不过,我建议仅针对该警告执行此操作,仅针对使用 FlatBuffers 和 std::optional 的代码将其关闭。