http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51884
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|WAITING |NEW Summary|ICE with c++11 thread and |lamba with templates |templates | --- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> 2012-01-18 01:01:11 UTC --- Reduced testcase as far as I can do it, any more it does not ICE: template<typename _Tp> struct is_same { static const int value = 0; }; template<int> struct enable_if { typedef void type; }; template<typename _Tp> class shared_ptr {}; struct thread { struct _Impl_base { virtual void _M_run() = 0; }; template<typename _Callable> struct _Impl : _Impl_base { }; template<typename _Callable> thread(_Callable&& __f) { _M_start_thread(_M_make_routine( __f)); } template<typename _Callable> shared_ptr<_Impl<_Callable>> _M_make_routine(_Callable&& __f); }; template <typename T, typename = void> struct foo {}; template <typename T> struct foo<T,typename enable_if<is_same<T>::value>::type> { template <bool Bar> void bar() const { auto f = [](){}; thread thr(f); } }; int main() { foo<int> f; f.bar<true>(); } --- CUT --- Note the original testcase had a _M_start_thread defined but this does not.