Подтвердить что ты не робот

Lambdas требует захвата 'this' для вызова статической функции-члена?

Для следующего кода:

struct B
{
    void g()
    {
        []() { B::f(); }();
    }

    static void f();
};

g++ 4.6 дает ошибку:

test.cpp: В лямбда-функции:
 test.cpp: 44: 21: ошибка: 'this' не была записана для этой лямбда-функции

(Интересно, что g++ 4.5 компилирует код отлично).

Является ли это ошибкой в ​​g++ 4.6, или действительно ли необходимо зафиксировать параметр 'this', чтобы иметь возможность вызвать статическую функцию-член? Я не понимаю, почему это должно быть, я даже квалифицировал вызов с помощью B::.

4b9b3361

Ответ 1

Я согласен, он должен компилироваться просто отлично. Для исправления (если вы еще не знаете) просто добавьте контрольный захват, и он будет компилировать штраф на gcc 4.6

struct B
{
    void g()
    {
        [&]() { B::f(); }();
    }

    static void f() { std::cout << "Hello World" << std::endl; };
};