https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99402

--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
François, this can't be right:

          return std::make_pair(-__seq_dist.first,
                                __seq_dist.second == __dp_exact
                                ? __dp_sign_max_size : __seq_dist.second);

This uses __seq_dist.second, but __seq_dist comes from _SeqTraits::_S_size
which is:

  template<typename _Sequence>
    struct _Sequence_traits
    {
      typedef _Distance_traits<typename _Sequence::iterator> _DistTraits;

      static typename _DistTraits::__type
      _S_size(const _Sequence& __seq)
      { return std::make_pair(__seq.size(), __dp_exact); }
    };

i.e. __seq_dist.second is always __dp_exact, so this function always returns
__dp_sign_max_size.

You should be using __base_dist.second, no?

Reply via email to