为什么编译器在我的lambda上使用复制构造函数而不是移动构造函数?

时间:2015-10-02 17:35:30

标签: c++ lambda c++14 move-semantics

我正在尝试使用通用捕获语法将unique_ptr移动到lambda,然后将其包装到std::function中。代码很简单:

#include <functional>
#include <memory>

using namespace std;

int main()
{
    unique_ptr<int> x;
    function<void()> y = [x(move(x))]() {};
}

这会选择template<typename T> function(T t)构造函数,但它会失败,因为它会尝试复制lambda。为什么要调用复制构造函数而不是移动构造函数,我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:3)

std::function只能与CopyConstructible类型一起使用,请参阅LWG 1287,其中阐明了这一点。

如果您的类型不可复制,则无法将其放入std::function