https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65549
--- Comment #20 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- Also crashes with 4.8. markus@x4 tmp % < tcp_client.ii template <typename> struct __and_; template <typename> class function; template <typename _Functor> class _Base_manager { protected: static _Functor *_M_get_pointer(int) {} }; template <typename, typename> class A; template <typename _Res, typename _Functor, typename... _ArgTypes> class A<_Res(_ArgTypes...), _Functor> : _Base_manager<_Functor> { public: static _Res _M_invoke(const int &) { (*_Base_manager<_Functor>::_M_get_pointer(0))(); } }; template <typename, typename> using __check_func_return_type = int; template <typename _Res, typename... _ArgTypes> class function<_Res(_ArgTypes...)> { template <typename> using _Invoke = decltype(0); template <typename _Functor> using _Callable = __and_<__check_func_return_type<_Invoke<_Functor>, _Res>>; template <typename, typename> using _Requires = int; public: template <typename _Functor, typename = _Requires<_Callable<_Functor>, void>> function(_Functor); using _Invoker_type = _Res (*)(const int &); _Invoker_type _M_invoker; }; template <typename _Res, typename... _ArgTypes> template <typename _Functor, typename> function<_Res(_ArgTypes...)>::function(_Functor) { _M_invoker = A<_Res(), _Functor>::_M_invoke; } class B { public: void configuration(); void run(int, int, function<void()>); }; main() { B app; app.run(0, 0, [&] { app.configuration(); }); } markus@x4 tmp % /usr/x86_64-pc-linux-gnu/gcc-bin/4.8.4/g++ -std=gnu++1y -flto -g -O2 -r -nostdlib -fno-inline -flto-partition=max tcp_client.ii lto1: internal compiler error: in build_abbrev_table, at dwarf2out.c:7478