Например:
class Example
{
public:
explicit Example(int n) : num(n) {}
void addAndPrint(vector<int>& v) const
{
for_each(v.begin(), v.end(), [num](int n) { cout << num + n << " "; });
}
private:
int num;
};
int main()
{
vector<int> v = { 0, 1, 2, 3, 4 };
Example ex(1);
ex.addAndPrint(v);
return 0;
}
Когда вы скомпилируете и запустите это в MSVC2010, вы получите следующую ошибку:
error C3480: 'Example :: num': переменная лямбда-захвата должна быть из включающего область действия
Однако с g ++ 4.6.2 (предварительная версия) вы получите:
1 2 3 4 5
Какой компилятор является правильным согласно стандартному проекту?