http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58181
--- Comment #1 from fimbul77 at gmail dot com --- sorry, my code was wrond. Following the code : #include <tuple> #include <cassert> int main() { static const auto factory = []() { int x = 0; return [=]() mutable { return std::forward_as_tuple( [&]() -> int { return x; } ); }; }; auto f1 = factory(); assert(std::get<0>(f1())() == 0); // f1.x == 0 }