https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111357
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> --- Reduced to remove <utility>: namespace std { template<typename _Tp, _Tp... _Idx> struct integer_sequence { }; template<typename _Tp, _Tp _Num> using make_integer_sequence = integer_sequence<_Tp, __integer_pack(_Num)...>; } using std::integer_sequence; using std::make_integer_sequence; template<int... V> void g(integer_sequence<int,V...>) {} template<typename ...T> struct c1 { static constexpr int value = 1; constexpr operator int() { return value; } }; template<typename T> struct R { using S = make_integer_sequence<int,c1<T>{}>; R() noexcept(noexcept(g(S()))) {} }; int main() { R<int>(); } This certainly seems like a front end bug not a libstdc++ one, but the library can make it work by casting _Tp _Num to its own type: template<typename _Tp, _Tp _Num> using make_integer_sequence = integer_sequence<_Tp, __integer_pack(_Tp(_Num))...>; This should not be needed, but makes it work.