создать std::function из лямбда, но лямбда фиксирует переменную, которая не предназначена для копирования
MCVE: http://coliru.stacked-crooked.com/a/1831ddc9520145b8
Я пытаюсь создать
std::function
которые захватывают и
std::move
локальная переменная
b
.
Это не компилируется.
#include <string>
#include <iostream>
#include <functional>
class B{// forbid copy constructor
public: B(){}
public: B(B&& copy){}
};
void f(B&& b){}
int main(){
B b;
std::function<void()> func_lambda = [b2 = std::move(b)]() mutable {
// ^
// I think the compile error happens at this assignment
f(std::move(b2));
};
}
На мой взгляд, причина того, что этот код не компилируется в том, что он не копируемый, и компилятор считает, что копия нужна при присваивании (отмечено выше).
ошибка: использование удаленной функции 'main()::<lambda()>::(constmain()::<lambda()>&)' 161 | новый _Functor(__source._M_access<const _Functor>());
Как это исправить, не делая
B
копируемый?