Рассмотрим следующий код:
int x = 3;
auto f1 = [x]() mutable
{
return x++;
};
auto f2 = [f1]()
{
return f1();
};
Это не скомпилируется, потому что f1()
не является const, а f2
не объявлен как изменяемый. Означает ли это, что если у меня есть библиотечная функция, которая принимает произвольный аргумент функции и записывает его в лямбду, мне всегда нужно сделать эту лямбду изменчивой, потому что я не знаю, что могут передавать пользователи? Примечательно, что перенос f1
в std::function
кажется, решает эту проблему (как?).