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

            Bug ID: 121890
           Summary: Several algorithms do not use iterator's
                    difference_type for arithmetic
           Product: gcc
           Version: 16.0
            Status: UNCONFIRMED
          Keywords: rejects-valid
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

#include <algorithm>
#include <testsuite_iterators.h>

namespace __gnu_test
{
    // Ensure that the iterator's difference_type is always used.
    template<typename T, typename D>
      void operator+(random_access_iterator_wrapper<T>, D) = delete;
    template<typename T, typename D>
      void operator+(D, random_access_iterator_wrapper<T>) = delete;
}

void
test()
{
  int a[1];
  __gnu_test::random_access_container<int> c(a);
  std::fill_n(c.begin(), 1U, 0);
  std::push_heap(c.begin(), c.end());
  std::for_each_n(c.begin(), 1U, [](int){});
  std::nth_element(c.begin(), c.begin(), c.end());
}


We get several errors like this:

/usr/include/c++/15/bits/stl_algo.h:3826:33: error: use of deleted function
‘void __gnu_test::operator+(random_access_iterator_wrapper<T>, D) [with T =
int; D = unsigned int]’
 3826 |           auto __last = __first + __n2;
      |                         ~~~~~~~~^~~~~~

Reply via email to