https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101722
--- Comment #5 from 康桓瑋 <hewillk at gmail dot com> --- (In reply to Jonathan Wakely from comment #2) > Boost 1.76.0 is totally broken, it does this in the middle of namespace > boost::math::tools::meta_programming: > > > template<typename L, typename Q> > using mp_remove_if_q = mp_remove_if<L, Q::template fn>; > > // Index sequence > // Use C++14 index sequence if available > #if defined(__cpp_lib_integer_sequence) && (__cpp_lib_integer_sequence >= > 201304) > #include <utility> > template<std::size_t... I> > using index_sequence = std::index_sequence<I...>; > > template<std::size_t N> > using make_index_sequence = std::make_index_sequence<N>; > > template<typename... T> > using index_sequence_for = std::index_sequence_for<T...>; > > #else > > > > If <utility> has already been included earlier, it happens to work (because > that #include is a no-op due to the header guard) but because my changes > mean that <utility> is included less often, that is the first time it's > seen. And it defines the contents of <utility> inside the boost namespace. > > I'll report it to boost (and make sure we patch boost in Fedora). Thank you for your explanation. :)