为什么 std::mutex 是标准布局类?

Ale*_*iev 13 c++ language-lawyer stdmutex

[thread.mutex.class]/3 :

[...]它是一个标准布局类([class.prop])。

提出这个要求的原因是什么?

dfr*_*fri 11

与相关 C 接口的互操作性。来自N2320(标准 C++ 多线程库):

C 级接口已从该提案中删除,理由如下:

  • 只要我们指定本提案中的关键类型是标准布局类型(我们已经这样做了),WG14 仍然可以自由地标准化与此 C++ 接口互操作的 C 接口。
  • WG14 比 WG21 更能解决取消互操作性问题。[...]
  • WG14 要求 WG21 牵头解决该问题。我们认为,我们可以通过仅指定一个 C++ 接口来最好地发挥带头作用,该接口具有最少的钩子来支持未来的 C 互操作接口(即类型是标准布局类型)。我们认为我们应该停止在 C++ 标准中实际指定 C 接口。WG14 可以更好地处理 C 接口,并且未来的 C++ 标准可以通过引用导入它。