https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120305
--- Comment #11 from Jonathan Wakely <redi at gcc dot gnu.org> --- Specifically, we have these concepts used to select a partial specialization of std::iterator_traits: template<typename _Iter> concept __cpp17_iterator = requires(_Iter __it) { { *__it } -> __can_reference; { ++__it } -> same_as<_Iter&>; { *__it++ } -> __can_reference; } && copyable<_Iter>; template<typename _Iter> concept __cpp17_input_iterator = __cpp17_iterator<_Iter> && equality_comparable<_Iter> && requires(_Iter __it) { typename incrementable_traits<_Iter>::difference_type; typename indirectly_readable_traits<_Iter>::value_type; typename common_reference_t<iter_reference_t<_Iter>&&, typename indirectly_readable_traits<_Iter>::value_type&>; typename common_reference_t<decltype(*__it++)&&, typename indirectly_readable_traits<_Iter>::value_type&>; requires signed_integral< typename incrementable_traits<_Iter>::difference_type>; }; That last signed_integral requirement is the problem. signed_integral<__int128> is satisfied for -std=gnu++20 and not for -std=c++20.