以下代码无法编译:
struct S{};
void foo(std::unique_ptr<S> ptr)
{
auto l = [p = std::move(ptr)]()
{
auto p2 = std::move(p);
};
l();
}
原因是std::move(p)
返回一个左值引用,因此编译器尝试调用被删除的复制构造函数。为什么move
在这里返回左值引用?
Here是完整样本。
答案 0 :(得分:8)
标记lambda mutable
,否则捕获const
。如
auto l = [p = std::move(ptr)]() mutable { ... };