tengo el siguiente códigoexpresión lambda (MSVC++ vs g ++)
#include <algorithm>
#include <iostream>
#include <vector>
#include <functional>
int main()
{
typedef std::vector<int> Vector;
int sum=0;
Vector v;
for(int i=1;i<=10;++i)
v.push_back(i);
std::tr1::function<double()> l=[&]()->double{
std::for_each(v.begin(),v.end(),[&](int n){sum += n; //Error Here in MSVC++});
return sum;
};
std::cout<<l();
std::cin.get();
}
El código anterior produce un error en MSVC++ 10
mientras que compila bien con g++ 4.5
. El error producido es 1 IntelliSense: invalid reference to an outer-scope local variable in a lambda body c:\users\super user\documents\visual studio 2010\projects\lambda\lambda.cpp 19 46 lambda
Así que, ¿hay alguna otra manera de acceder al exterior ámbito de las variables-sum
sin crear explícitamente una nueva variable dentro de la expresión lambda local (dentro std::for_each
)?
En g++ 4.5
el código compila bien. ¿El estándar (proyecto N3000) decir nada al respecto? (No tengo una copia de C++ - 0x (1x) estándar en la actualidad)
doees VS10 tienen algunos errores conocidos relacionados con el ámbito de aplicación de captura de lambda, som más probable GCC es correcto en este caso. – jalf
acaba de descargar un borrador estándar reciente, en busca de "estándar de C++" en Google le da un enlace para ello. Es una experiencia de aprendizaje interesante echarle un vistazo :) –
Tenga en cuenta que el último borrador es el FCD, N3092, que puede [descargar del sitio web del WG21] (http://www.open-std.org/jtc1/ sc22/wg21/docs/papers/2010/n3092.pdf) (** advertencia: 10.5MB PDF **). –