Краткий пример:
#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
? Это сильно отличается от традиционной передачи параметров именованным функциям. В чем обоснование?
У меня сложилось впечатление, что весь смысл захвата по значению состоит в том, чтобы позволить пользователю изменять временное значение - в противном случае мне почти всегда лучше использовать захват по ссылке, разве нет 't I?
Какие-нибудь просветления?
(Я, кстати, использую MSVC2010. AFAIK, это должно быть стандартным)