次のコードがあります
#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();
}
上記のコードではエラーが発生しますがMSVC++ 10
、 では正常にコンパイルされg++ 4.5
ます。生成されるエラーは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
sum
では、ローカル ラムダ式 (inside ) 内に新しい変数を明示的に作成せずに、outer-scope 変数にアクセスする他の方法はありますstd::for_each
か?
コード上g++ 4.5
で正常にコンパイルされます。標準 (n3000 ドラフト) はそれについて何か言っていますか? (現在、C++-0x(1x ?) 標準のコピーを持っていません)