GCC47 doesn't allow to access non-static members in non-static member initialization. The following program fails to compile with the error "invalid use of non-static data member 'testee::l1'". #include <iostream> #include <functional> using std::cout; using std::endl; struct testee { std::function<void()> l1 = []() { cout << "world" << endl; }; std::function<void()> l2 = [=]() { cout << "hello " << endl; l1(); }; }; int main() { testee t; t.l2(); } Taking the address of l1 in the lambda expression used to initialize l2 is also refused by GCC.
This Bug still exists in the latest GCC 4.7 release.
4.7.0 *is* the latest GCC release :) Anyway, confirmed, the example looks valid to me.
My local GCC says "4.7.0_3". :)
still seems to be broken in 4.7.2 :-P but is known to be working with llvm 3.2 # make simple.cpp: In lambda function: simple.cpp:11:5: error: invalid use of non-static data member ‘testee::l1’ simple.cpp:15:9: error: from this location make[2]: *** [CMakeFiles/simple.dir/simple.cpp.o] Error 1 make[1]: *** [CMakeFiles/simple.dir/all] Error 2 make: *** [all] Error 2 *** Failed *** # g++ --version g++ (Ubuntu/Linaro 4.7.2-11precise2) 4.7.2 Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
This is fixed. I'm adding the testcase and closing the report.
Done.
which gcc version will have that patch applied? thanks for fixing, hope libcppa will work with gcc now again! On 05/04/2013 02:33 PM, paolo.carlini at oracle dot com wrote: > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51927 > > Paolo Carlini <paolo.carlini at oracle dot com> changed: > > What |Removed |Added > ---------------------------------------------------------------------------- > Status|NEW |RESOLVED > Blocks| |54367 > Resolution| |FIXED > > --- Comment #6 from Paolo Carlini <paolo.carlini at oracle dot com> 2013-05-04 12:33:13 UTC --- > Done. >