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 <iostream> #include <functional> using std::cout; using std::endl; typedef std::function<void()> 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.