лямбды требуют захвата 'this' для вызова статической функции-члена? - PullRequest
55 голосов
/ 09 февраля 2011

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

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

    static void f();
};

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

test.cpp: в лямбда-функции:
test.cpp: 44: 21: error: 'this' не было захвачено для этой лямбда-функции

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

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

1 Ответ

42 голосов
/ 09 февраля 2011

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

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

    static void f() { std::cout << "Hello World" << std::endl; };
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...