template<class R> concept simple-view = // exposition only View<R> && Range<const R> && Same<iterator_t<R>, iterator_t<const R>> && Same<sentinel_t<R>, sentinel_t<const R>>; template<InputIterator I> concept has-arrow = // exposition only is_pointer_v<I> || requires(I i) { i.operator->(); }; template<class T, class U> concept not-same-as = // exposition only !Same<remove_cvref_t<T>, remove_cvref_t<U>>;