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.