On-line: гостей 0. Всего: 0 [подробнее..]
Программисты всех стран, объединяйтесь!

АвторСообщение



ссылка на сообщение  Отправлено: 28.07.12 19:53. Заголовок: MS VC++ 2010: баг при "захвате" переменной во вложенном лямбда-выражении


Еще один баг компилятора MS VC++ 2010 обнаружился при явном "захвате" переменной вложенным лямбда-выражением, когда внешнее лямбда-выражение эту переменную явно не захватывает. Чтобы было понятно, о чем идет речь, обратимся сразу же к демонстрационному примеру.

 
#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 );
}


В этом примере лямбда-выражение m2 в списке захваченных переменных явно указывает переменную i, которая является параметром функции f1. Согласно стандарту С++ 2011 это должно привести к неявному захвату переменной i внешним лямбда-выражением m1. То есть данная конструкция вложенных лямбда-выражений

auto m1 = [=] { auto m2 = [ i ] { std::cout << i << std::endl; }; m2(); };


эквивалентна следующей конструкции

auto m1 = [ i ] { auto m2 = [ i ] { std::cout << i << std::endl; }; m2(); };


в которой перменная i явно захватывается лямбда-выражением m1. Однако компилятор MS VC++ 2010 при компиляции исходного демонстрационного примера выдает сообщения об ошибках:


 цитата:
error C3481: i: передаваемая переменная в лямбда-выражении не найдена
error C2065: i: необъявленный идентификатор
error C2065: i: необъявленный идентификатор
error C2064: результатом вычисления фрагмента не является функция, принимающая 0 аргументов



Компилятор GCC 4.7.0, как и полагается, компилирует данный код без ошибок.

Фактически, в компиляторе MS VC++ 2010 лямбда-выражения лишь "обозначенны" или заявлены, но не реализованы в полной мере.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 1 [только новые]





ссылка на сообщение  Отправлено: 28.07.12 19:54. Заголовок: Пришел вполне ожидае..


Пришел вполне ожидаемый ответ майкрософт на этот баг компилятора 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



Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 43
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет