http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56710
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- That testcase shows this is an ice-on-valid-code bug. Reduced: struct Dummy { void getDummy() const { } }; template<typename F> void eachDummy(F closure) { Dummy d; closure(d); } template<typename F> void iterateDummies(F closure) { eachDummy([&] (const Dummy& d) { return closure(d); }); } int main() { iterateDummies([] (const Dummy& d) { d.getDummy(); return true; }); }