problemas com loops for em lambdas

9

Atualmente, estou reescrevendo um pequeno projeto que escrevi há algum tempo e estou substituindo os ponteiros de função por std::function e lambdas.

Enquanto fazia isso, tropecei em um problema com loops for em lambdas. no Visual Studio 2010 (com SP1) gera erros estranhos quando loops for usado dentro de lambdas, se o lambda for definido no escopo do arquivo:

#include <iostream>

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

seguindo o snippet, no entanto, compila bem:

#include <iostream>

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

Ambos os trechos compilam bem usando o MinGW GCC 4.7.

Alguém mais observou esse comportamento também? Isso é um bug na implementação lambda do Visual Studio? Você conhece alguma solução alternativa?

  

Editar:
  relatório de bug na microsoft connect:
link

    
por smerlin 08.04.2011 в 20:47
fonte

1 resposta

5

Eu posso verificar esse comportamento no Visual Studio 2010 RTM. Parece ser limitado apenas para loops, pois o seguinte compila muito bem.

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

Eu definitivamente alertaria a Microsoft para esse problema, arquivando um bug na conexão

Observação: eu não sei se 100% é um bug, mas as evidências sugerem que é

    
por JaredPar 08.04.2011 / 21:05
fonte