Рассмотрим следующее:
void test( const int &value )
{
auto testConstRefMutableCopy = [value] () mutable {
value = 2; // compile error: Cannot assign to a variable captured by copy in a non-mutable lambda
};
int valueCopy = value;
auto testCopyMutableCopy = [valueCopy] () mutable {
valueCopy = 2; // compiles OK
};
}
Почему первая версия является компиляционной ошибкой, когда я объявлял лямбда как измененную и захваченную value
по значению (которая, как я думал, сделала ее копию)?
Протестировано с помощью clang (x86_64-apple-darwin14.3.0), откуда приходит сообщение об ошибке, и Visual С++ (vc120).