2011-04-08 9 views
9

Actualmente estoy reescribiendo un pequeño proyecto que escribí hace un tiempo, y estoy reemplazando punteros de función con std::function y lambdas.problemas con bucles for en lambdas

Mientras hacía esto tropecé con un problema con bucles en lambdas. en Visual Studio 2010 (con SP1) genera errores extraños cuando los bucles se utilizan dentro de lambdas, si el lambda se define en el ámbito de archivo:

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

siguiente fragmento embargo compila bien:

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

Tanto los fragmentos se compilan bien usando MinGW GCC 4.7.

¿Alguien más ha observado este comportamiento así? ¿Es esto un error en la implementación lambda de Visual Studio? ¿Conoces alguna solución alternativa?

Editar:
informe de error en Microsoft Connect:
https://connect.microsoft.com/VisualStudio/feedback/details/660742/error-with-for-loops-in-file-scope-lamdas-c-0x#details

+0

Su 'lambda', aunque el b es (en su mayoría) silencioso ... –

+0

@Chr es: oops, bastante embarazoso o_o ... arreglado. – smerlin

Respuesta

5

puedo comprobar este comportamiento en Visual Studio 2010 RTM. Parece estar limitado solo para bucles, ya que la siguiente compilación está bien.

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

Sin duda alertar Microsoft a este problema mediante la presentación de un error en la conexión

Nota: No hago 100% saber si esto es un error, pero la evidencia sugiere que es

+3

@smerlin: Además, una vez que se informa el error, publique aquí el enlace al envío de errores para que podamos votarlo. – ildjarn

+0

https://connect.microsoft.com/VisualStudio/feedback/details/660742/error-with-for-loops-in-file-scope-lamdas-c-0x#details – smerlin