[Bug c++/51927] [C++0x] Cannot access non-static members in initializer
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51927 --- Comment #1 from gccearlyadop...@trash-mail.com 2012-05-30 07:48:35 UTC --- This Bug still exists in the latest GCC 4.7 release.
[Bug c++/51927] [C++0x] Cannot access non-static members in initializer
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51927 --- Comment #3 from gccearlyadop...@trash-mail.com 2012-05-30 12:34:12 UTC --- My local GCC says "4.7.0_3". :)
[Bug c++/51818] New: [C++0x] Name mangling error using lambda expressions in GCC47
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51818 Bug #: 51818 Summary: [C++0x] Name mangling error using lambda expressions in GCC47 Classification: Unclassified Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: gccearlyadop...@trash-mail.com The following program fails to compile: #include #include using std::cout; using std::endl; typedef std::function void_fun; struct foo { void_fun bar = [=]() { cout << "foo::bar" << endl; }; void_fun baz = [=]() { cout << "foo::baz" << endl; }; }; int main() { foo f; f.bar(); f.baz(); } GCC 47 says: ... FATAL:Symbol __ZSt4moveIRNUlvE_EEONSt16remove_referenceIT_E4typeEOS3_ already defined Furthermore, it's not possible to call bar() from baz: minimal_mangling_example.cpp: In lambda function: minimal_mangling_example.cpp:12:5: error: invalid use of non-static data member 'foo::bar' minimal_mangling_example.cpp:15:9: error: from this location Unless the this pointer is passed and used explicitly: void_fun baz = [this]() { this->baz(); }; That's wrong, too. The standard says in 5.1.2.7 ... "transforming id- expressions referring to non-static class members into class member access expressions using (*this) ...". Thus, baz should be able to call bar without using this: void_fun baz = [=]() { bar(); }; Best regards.
[Bug c++/51927] New: [C++0x] Cannot access non-static members in initializer
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51927 Bug #: 51927 Summary: [C++0x] Cannot access non-static members in initializer Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: gccearlyadop...@trash-mail.com 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 #include using std::cout; using std::endl; struct testee { std::function l1 = []() { cout << "world" << endl; }; std::function 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.