C++ のラムダ式でキャプチャした値を変更する

C++ラムダ式で変数をコピーしてキャプチャした場合、その変数の値を変更する事ができません。

int n = 10;
[n](){
    // error
    n = 42;
};


どうしても変更したい場合は mutable を付けることで変更することが出来るようになります。

[ソース]

#include <iostream>

int
main(){
    int n = 10;
    [n]() mutable {
        // error
        n = 42;
        std::cout << n << std::endl;
    }();
    std::cout << n << std::endl;
    return 0;
}

[出力]

42
10