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

MS VC++ 2010: баг при поиске имен в лямбда-выражении

Сыроежка: Казалось бы, что уже трудно найти новый баг компилятора MS VC++ 2010, относящийся к лямбда-выражениям, после уже обнаруженых мною ранее нескольких багов. Однако это не так, и список багов для лямбда-выражений компилятора MS VC++ 2010 придется пополнить еще одним багом. На этот раз компилятор MS VC++ 2010 неправильно осуществляет поиск имен при определнии лямбда-выражения внутри класса. Вот пример программы, демонстрирующий этот изъян. [pre2]#include "stdafx.h" void f( int ) {} struct { void f() {} void g() { [=] { f(); } (); } } a; int _tmain(int argc, _TCHAR* argv[]) { return 0; }[/pre2] При компиляции этого кода компилятор MS VC++ 2010 выдает следующее сообщение об ошибке: [quote]error C2660: f: функция не принимает 0 аргументов[/quote] То есть при поиске имени f в лямбда-выражении компилятор не замечает это имя, объявленное внутри неименованного класса (это не имеет значения, именован класс или нет), а начинает поиск имени f за пределами класса. Так как он находит в глобальном пространстве имен функцию f, принимающую один параметр, а в лямбда-выражении функция с таким именем вызывается без аргументов, то компилятор и сообщает об ощибке. При компиляции этого кода компилятором GCC 4.7.0 никакой ошибки не возникает. Порадую Майкрософт новым сообщением о баге их компилятора!

Ответов - 1 новых

Сыроежка: Пришел ответ от Майкрософт, в котором они уверяют, что в следующем релизе их компилятора (как я полагаю, это будет релиз 11) этот баг будет исправлен. Posted by Microsoft on 11.04.2012 at 10:43 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



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