Я думаю, что вам, возможно, придется явно объявить закрытие над sum
, например, так:
std::for_each(v.begin(),v.end(),[&sum](int n){sum += n;});
В общем, вам разрешено неявно захватывать переменные в локальной области видимости, нотолько до тех пор, пока лямбда гарантированно будет работать в том же объеме.Возможно, из-за того, что вы назначаете лямбду функции var и выполняете ее позже (вместо того, чтобы просто запускать ее напрямую), MSVC не достаточно умен, чтобы понять, что это условие выполняется - в конце концов, вы могли бы потенциально передать l
и выполнитьэто в некоторой другой области - так что это требует явного объявления захвата.