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

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

Сыроежка: Я уж думал, что исчерпал тему багов, относящихся к лямбда-выражениям, но оказалось, что мои предположения были не верны. Так что представляю на обозрение еще один баг в лямбда-выражениях компилятора MS VC++ 2010. Этот баг связан с невозможностью совмещения спецификатора класса памяти static с ключевым словом typename, когда используется зависящий от шаблона тип данного. Вот пример, демонстрирующий сказанное: [pre2]#include "stdafx.h" #include <iterator> template <typename Iterator> void f( Iterator ) { static typename std::iterator_traits<Iterator>::difference_type n; } template <typename Iterator> void f1( Iterator ) { auto lm = []() { static typename std::iterator_traits<Iterator>::difference_type n; }; } int _tmain(int argc, _TCHAR* argv[]) { { int *p = 0; f( p ); f1( p ); } return 0; }[/pre2] При компиляции этого кода компилятор MS VC++ 2010 выдает следующее сообщение об ошибке: [quote]error C2899: использование typename вне объявления шаблона не допускается[/quote] Это сообщение об ошибке относится к предложению в лямбда-выражении функции f1 Точно такое же предложение в функции f, где нет лямбда-выражения компилируется без проблем.

Ответов - 1

Сыроежка: Ответ от Майкрософт подтвердил, что это есть баг компилятора, который они уже исправили, и исправления появятся вместе с выпуском нового релиза компилятора MS VC++ 2011. Posted by Microsoft on 28.05.2012 at 14:15 Hello, Thank you for reporting this bug. We have fixed this in the VS11 RC release, next major release will have the fix. Thanks, Ulzii Luvsanbat Visual C++ Team



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