back_inserter for move-only type

时间:2013-08-09 17:58:03

标签: c++ c++11

在下面的代码中,对象'queue'是不可复制的,但由于std :: mutex而可以移动。

std::generate_n(std::back_inserter(thread_pool),
                std::thread::hardware_concurrency,
                [&](){return std::thread(handler(), exiting, queue);});

由于互斥锁上的私有拷贝构造函数,VC ++ 2012无法编译。它无法为队列生成复制构造函数。为什么要尝试复制队列?在我看来,一切都是通过引用来获取它,因此没有副本。

1 个答案:

答案 0 :(得分:6)

正在尝试通过将值queue传递给std::thread来复制std::ref(queue)。如果您要传递引用,请使用包装器:queue

如果您确实想将std::thread移到std::move(queue),则需要传递{{1}}以使其成为右值。但它仍然无效,because of a bug in VS