Почему нельзя изменять перемычки лямбда?
AFAIK не изменяемые переменные захвата lambdas как const. Это заставляет меня задаться вопросом, почему они могут быть перемещены?
auto p = std::make_unique<int>(0);
auto f = [p = std::move(p)](){ p->reset(); }; // Error, p is const
auto f2 = std::move(f); // OK, the pointer stored inside lambda is moved
Ответы
Ответ 1
AFAIK не изменяемые переменные захвата lambdas как const.
Нет, они этого не делают. Их перегрузки operator()
const
. Действительные переменные-члены не являются.
Он не отличается от:
class A
{
unique_ptr<int> p
public:
//Insert constructors here.
void operator() const {p->reset();}
};