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