Re: C++0x, лямбда в лямбде. Доступа ко внешней переменной.
От: Alexey F  
Дата: 02.07.11 12:17
Оценка:
Здравствуйте, shestero, Вы писали:

S>
S>std::for_each( // цикл 1
S>    mapmapK2.begin(),
S>    mapmapK2.end(),
S>    [&](const std::pair<CString, std::map<CString, std::pair<float, float> > >& m) mutable
S>    {
S>        mapDatas[m.first].vecValues.resize( good_coreid.size() );

S>        int K=0;
S>        std::for_each( // цикл 2
S>            good_coreid.begin(),
S>            good_coreid.end(),
S>            [&](const CString& CoreID) mutable
S>            {
S>                mapDatas[m.first].vecValues[K] = m.second.at(CoreID).second;  // ! тут (mapDatas)
S>                K++;
S>            }
S>        );
S>    }
S>);
S>


S>VS2010 подсвечивает как ошибку ("Error: invalid reference to an outer-scope local variable in lambda-body", но компилирует.

S>Бажек?
S>Или что не так?
Да, баг в MS VS2010.
См. здесь: http://connect.microsoft.com/VisualStudio/feedback/details/560907/capturing-variables-in-nested-lambdas
Там же расписан workaround — сделать ссылку на mapDatas в первой лямбде и передать её во вторую.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.