// { dg-options "-std=gnu++20" } // { dg-do compile { target c++20 } } #include 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 s(begin, end, 1);