https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60976
--- Comment #24 from Giuseppe Ottaviano <ott at fb dot com> --- > No, only on trunk. It depends on the additions in r225242, so to use the new > alloc_traits.h you would only need the new code in > https://gcc.gnu.org/viewcvs/gcc/trunk/libstdc%2B%2B-v3/include/std/ > type_traits?r1=225242&r2=225241&pathrev=225242 (which could be added to the > top of alloc_traits.h just in order to test, if that's easier). Does __detected_or_t depend on some new language features? I copied all the required metafunctions (including __void_t and __ptr_rebind), and I get this error: .../bits/alloc_traits.h: In substitution of 'template<class _Tp> using __v_pointer = typename _Tp::void_pointer [with _Tp = std::allocator<std::thread::_Impl<std::_Bind_simple<std::function<void()>()> > >]': .../bits/alloc_traits.h:57:29: required from 'struct std::__detector<void*, void, std::__allocator_traits_base::__v_pointer, std::allocator<std::thread::_Impl<std::_Bind_simple<std::function<void()>()> > > >' [...] .../bits/alloc_traits.h:103:53: error: no type named 'void_pointer' in 'class std::allocator<std::thread::_Impl<std::_Bind_simple<std::function<void()>()> > >' Looks like it is ignoring the __detector negative case.