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::
.
Ответы
Ответ 1
Я согласен, он должен компилироваться просто отлично. Для исправления (если вы еще не знаете) просто добавьте контрольный захват, и он будет компилировать штраф на gcc 4.6
struct B
{
void g()
{
[&]() { B::f(); }();
}
static void f() { std::cout << "Hello World" << std::endl; };
};