Этот фрагмент кода:
std::vector <int> ints(5,1);
std::for_each(ints.begin(), ints.end(), [](const decltype(*std::begin(ints))& val){ val*=2; });
компилируется и прекрасно работает в Visual Studio 2010 и изменяет каждое значение в контейнере, как если бы не было ключевого слова const.Это ошибка в компиляторе, поскольку ожидаемое поведение заключается в том, что val не модифицируется?(другими словами, я ожидаю, что это не скомпилируется, но это происходит)
Обновление:
std::for_each(ints.begin(), ints.end(), [](const std::remove_reference<decltype(*std::begin(ints))>::type& val){ val*=2; });
, кажется, ведет себя правильно, хотяне делай меня умнее.
Примечание:
decltype(*std::begin(ints))
является ссылкой на int.