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
Su 'lambda', aunque el b es (en su mayoría) silencioso ... –
@Chr es: oops, bastante embarazoso o_o ... arreglado. – smerlin