Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

lambdas require capturing 'this' to call static member function?

Tags:

c++

c++11

lambda

For the following code:

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

g++ 4.6 gives the error:

test.cpp: In lambda function:
test.cpp:44:21: error: 'this' was not captured for this lambda function

(Interestingly, g++ 4.5 compiles the code fine).

Is this a bug in g++ 4.6, or is it really necessary to capture the 'this' parameter to be able to call a static member function? I don't see why it should be, I even qualified the call with B::.

like image 542
HighCommander4 Avatar asked Feb 09 '11 00:02

HighCommander4


1 Answers

I agree, it should compile just fine. For the fix (if you didn't know already), just add the reference capture and it will compile fine on gcc 4.6

struct B {     void g()     {         [&]() { B::f(); }();     }      static void f() { std::cout << "Hello World" << std::endl; }; }; 
like image 87
Mikael Persson Avatar answered Sep 22 '22 13:09

Mikael Persson