Например:
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, вы получаете следующую ошибку:
ошибка C3480: 'Example :: num': переменная захвата лямбды должна быть из области действия функции
Однако, с g ++ 4.6.2 (prerelease) вы получите:
1 2 3 4 5
Какой компилятор прав в соответствии со стандартным проектом?