проблемы с циклами for в лямбдах

В настоящее время я переписываю небольшой проект, написанный мной некоторое время назад, и заменяю указатели функций на std :: function и лямбды.

При этом я наткнулся на проблему с циклами for в лямбдах. в Visual Studio 2010 (с пакетом обновления 1) генерирует странные ошибки, когда циклы for используются внутри лямбда-выражений, ЕСЛИ лямбда определена в области видимости файла:

#include 

auto print_sum =
    []( int n )
    {
        int sum=0;
        // line below generates: 
        //   error C2143: syntax error : missing ')' before ';'
        for( int i=1; i<=n; ++i ) 
            sum += i;
        std::cout << sum << "\n";
    };

int main()
{
    print_sum(3);
    return 0;
}

следующий фрагмент, однако компилируется нормально:

#include 

int main()
{
    auto print_sum =
        []( int n )
        {
            int sum=0;
            for( int i=1; i<=n; ++i )
                sum += i;
            std::cout << sum << "\n";
        };
    print_sum(3);
    return 0;
}

Оба фрагмента отлично компилируются с использованием MinGW GCC 4.7.

Кто-нибудь еще наблюдал такое поведение? Это ошибка в реализации лямбда-выражения в Visual Studio? Знаете ли вы какие-либо обходные пути?

Изменить:
отчет об ошибке в Microsoft Connect:
https://connect.microsoft.com/VisualStudio/feedback/details/660742/error-with-for-loops-in -file-scope-lamdas-c-0x # подробности

9
задан smerlin 13 April 2011 в 06:10
поделиться