仅包含可移动 std::map 的 class 的移动构造函数不起作用

Move constructor of class containing only movable std::map not working

我有一个包含 std::map<int, std::mutex> 的 class,但我无法为其定义移动构造函数。 std::mutex 不可复制也不可移动,但 std::map 的移动构造函数仍然有效,因为它不需要其类型可复制或可移动:

std::map<int, std::mutex> map1;
std::map<int, std::mutex> map2{std::move(map1)}; //this compiles without warnings

但是我有一个 class 包含这样的地图:

class OnlyMovable{
  std::map<int, std::mutex> map;
public:
  OnlyMovable(const OnlyMovable&& om) : map{std::move(om.map)} //somehow requires copy-ctor of mutex
  {}
};

这里 gcc 给了我一个巨大的错误消息,最后抱怨 std::mutex 没有复制构造函数。

那么这个 class 的移动构造函数在哪里调用 std::mutex 的复制构造函数,这是如何避免的?

PS:我知道这个 class 没有意义,但这只是一个简单的可验证示例,源自我的实际 class.

您假定的移动构造函数采用 const 右值引用。 om 无法修改,这意味着它的成员无法移动。只需放下 const