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.

Reply via email to