| // { 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); |