// { dg-options "-std=gnu++20" }
// { dg-do compile { target c++20 } }
#include <ranges>
struct iterator
{
  using difference_type = int;
  int i;
  int operator*() const { return i; }
  // These are intentionally not constexpr:
  iterator& operator++() { ++i; return *this; }
  iterator operator++(int) { return {i++}; }
  bool operator==(const iterator& it) const { return i == it.i; }
};
constexpr iterator begin(1), end(2);
using std::ranges::subrange;
using std::ranges::subrange_kind;
// This used to fail due to using operator++ and operator== in an assertion:
constexpr subrange<iterator, iterator, subrange_kind::sized> s(begin, end, 1);