Краткий пример:
#include <iostream>
int main()
{
int n;
[&](){n = 10;}(); // OK
[=]() mutable {n = 20;}(); // OK
// [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda
std::cout << n << "\n"; // "10"
}
Вопрос: зачем нам ключевое слово mutable
? Это сильно отличается от традиционного параметра, передаваемого именованным функциям. Какое обоснование?
У меня создалось впечатление, что вся точка захвата по значению заключается в том, чтобы позволить пользователю изменять временное - в противном случае я почти всегда лучше использую захват по ссылке, не я?
Любые просветления?
(Кстати, я использую MSVC2010. AFAIK это должно быть стандартным)