Object captured by value in lambda are immutable by default. This is because operator()
of the generated functional object (compiler generates functional object for lambdas) is const
by default.
int a = 0;
auto lam = [a]() { ++a; }; // Compilation error
Using mutable
keyword allows us to mutate objects captured by value.
int a = 0;
auto lam = [a]() mutable { ++a; };
capture clause.
parameter list Optional.
mutable specification Optional.
exception specification Optional.
trailing-return-type Optional.
lambda body.