我正在尝试使用通用捕获语法将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。为什么要调用复制构造函数而不是移动构造函数,我该怎么做才能解决这个问题?
答案 0 :(得分:3)
std::function
只能与CopyConstructible类型一起使用,请参阅LWG 1287,其中阐明了这一点。
如果您的类型不可复制,则无法将其放入std::function
。