Правило для переменной лямбда-захвата

Например:

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

Какой компилятор является правильным согласно стандартному проекту?

7
задан Xeo 29 May 2012 в 15:03
поделиться