11template<
typename Self, concepts::Iterator Iter,
typename Value>
15 meta::Conditional<concepts::RandomAccessIterator<Iter>, RandomAccessIteratorTag,
16 meta::Conditional<concepts::BidirectionalIterator<Iter>, BidirectionalIteratorTag,
17 meta::Conditional<concepts::ForwardIterator<Iter>, ForwardIteratorTag,
19 Value, meta::IteratorSSizeType<Iter>> {
30 constexpr auto base() const& -> Iter const& {
return m_base; }
31 constexpr auto base() && -> Iter {
return util::move(m_base); }
48 constexpr friend auto operator-(Self
const& a, Self
const& b) -> SSizeType
51 return a.base() - b.base();
54 constexpr friend auto operator==(Self
const& a, Self
const& b) ->
bool
57 return a.base() == b.base();
60 constexpr friend auto operator<=>(Self
const& a, Self
const& b)
63 return a.base() <=> b.base();
constexpr friend auto operator-(Self const &a, Self const &b) -> SSizeType requires(concepts::RandomAccessIterator< Iter >)
Definition iterator_extension.h:48
constexpr auto base() const &-> Iter const &
Definition iterator_extension.h:30
constexpr friend auto operator<=>(Self const &a, Self const &b)
Definition iterator_extension.h:60
IteratorExtension()=default
constexpr auto base() &&-> Iter
Definition iterator_extension.h:31
constexpr IteratorExtension(Iter base)
Definition iterator_extension.h:28
constexpr void advance_one()
Definition iterator_extension.h:33
constexpr void back_one()
Definition iterator_extension.h:35
constexpr void advance_n(SSizeType n)
Definition iterator_extension.h:41
constexpr friend auto operator==(Self const &a, Self const &b) -> bool requires(concepts::EqualityComparable< Iter >)
Definition iterator_extension.h:54
Definition bidirectional_iterator.h:8
Definition operations.h:27
Definition random_access_iterator.h:12
constexpr auto move
Definition move.h:38