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