создать 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копируемый?

0 ответов

Другие вопросы по тегам