Форум » C/C++ » MS VC++ 2010: баг при "захвате" переменной во вложенном лямбда-выражении » Ответить

MS VC++ 2010: баг при "захвате" переменной во вложенном лямбда-выражении

Сыроежка: Еще один баг компилятора MS VC++ 2010 обнаружился при явном "захвате" переменной вложенным лямбда-выражением, когда внешнее лямбда-выражение эту переменную явно не захватывает. Чтобы было понятно, о чем идет речь, обратимся сразу же к демонстрационному примеру. [pre2] #include "stdafx.h" #include <iostream> void f1( int i ) { auto m1 = [=] { auto m2 = [ i ] { std::cout << i << std::endl; }; m2(); }; m1(); } int _tmain(int argc, _TCHAR* argv[]) { return ( 0 ); }[/pre2] В этом примере лямбда-выражение m2 в списке захваченных переменных явно указывает переменную i, которая является параметром функции f1. Согласно стандарту С++ 2011 это должно привести к неявному захвату переменной i внешним лямбда-выражением m1. То есть данная конструкция вложенных лямбда-выражений [pre2]auto m1 = [=] { auto m2 = [ i ] { std::cout << i << std::endl; }; m2(); };[/pre2] эквивалентна следующей конструкции [pre2]auto m1 = [ i ] { auto m2 = [ i ] { std::cout << i << std::endl; }; m2(); };[/pre2] в которой перменная i явно захватывается лямбда-выражением m1. Однако компилятор MS VC++ 2010 при компиляции исходного демонстрационного примера выдает сообщения об ошибках: [quote]error C3481: i: передаваемая переменная в лямбда-выражении не найдена error C2065: i: необъявленный идентификатор error C2065: i: необъявленный идентификатор error C2064: результатом вычисления фрагмента не является функция, принимающая 0 аргументов[/quote] Компилятор GCC 4.7.0, как и полагается, компилирует данный код без ошибок. Фактически, в компиляторе MS VC++ 2010 лямбда-выражения лишь "обозначенны" или заявлены, но не реализованы в полной мере.

Ответов - 1

Сыроежка: Пришел вполне ожидаемый ответ майкрософт на этот баг компилятора MS VC++ 2010 Posted by Microsoft on 16.04.2012 at 11:44 Hi: A fix for this issue has been checked into the compiler sources. The fix should show up in the next release of Visual C++. Xiang Fan Visual C++ Team



полная версия страницы