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

            Bug ID: 121917
           Summary: ranges::shuffle incorrectly requires its arguments to
                    model sized_sentinel_for
           Product: gcc
           Version: 15.2.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 <iterator>
#include <random>

struct non_default_sentinel_t { };

template<std::input_or_output_iterator I>
bool operator==(const I& i, non_default_sentinel_t)
{ return i == std::default_sentinel; }

int main()
{
  int a[2]{};
  std::counted_iterator iter(a, 2);
  std::default_random_engine e;
  std::ranges::shuffle(iter(a, 2), non_default_sentinel_t{}, e);
}

This fails to compile:

 1972 |         const __uc_type __urange = __uc_type(__last - __first);

Reply via email to