9template<concepts::InputIterator Iter, concepts::SentinelFor<Iter> Sent>
10requires(!concepts::SameAs<Iter, Sent> && concepts::Copyable<Iter>)
14 meta::IteratorValue<Iter>,
meta::IteratorSSizeType<Iter>> {
24 template<
typename It,
typename St>
28 template<
typename It,
typename St>
31 this->m_state = other.m_state;
38 requires((
concepts::IndirectlyReadable<Iter const> && (requires(Iter const& it) { it.operator->(); })) ||
42 if constexpr (
requires(Iter
const& it) { it.operator->(); }) {
44 }
else if constexpr (concepts::Reference<meta::IteratorReference<Iter>>) {
46 return util::addressof(temp);
50 constexpr auto operator->() const -> meta::IteratorValue<Iter> const* {
51 return util::addressof(m_value);
55 constexpr Proxy(meta::IteratorReference<Iter>&& value) : m_value(util::
move(
value)) {}
57 meta::IteratorValue<Iter> m_value;
67 template<concepts::InputIterator It, concepts::SentinelFor<It> St>
71 template<
typename It, concepts::SentinelFor<It> St>
74 if (a.m_state.index() == b.m_state.index()) {
77 if (a.m_state.index() == 0) {
83 template<
typename It, concepts::SentinelFor<It> St>
86 if (a.m_state.index() == 1 && b.m_state.index() == 1) {
89 if (a.m_state.index() == 0 && b.m_state.index() == 0) {
92 if (a.m_state.index() == 0) {
98 template<concepts::SizedSentinelFor<Iter> It, concepts::SizedSentinelFor<Iter> St>
102 if (a.m_state.index() == 1 && b.m_state.index() == 1) {
105 if (a.m_state.index() == 0 && b.m_state.index() == 0) {
108 if (a.m_state.index() == 0) {
118 template<concepts::IndirectlySwappable<Iter> It,
typename St>
constexpr CommonIterator(Iter it)
Definition common_iterator.h:21
constexpr CommonIterator(Sent sent)
Definition common_iterator.h:22
constexpr CommonIterator(CommonIterator< It, St > const &other)
Definition common_iterator.h:26
constexpr auto operator=(CommonIterator< It, St > const &other) -> CommonIterator &
Definition common_iterator.h:30
constexpr auto operator->() const
Definition common_iterator.h:37
constexpr friend auto tag_invoke(types::Tag< iterator_move >, CommonIterator const &a) -> decltype(auto)
Definition common_iterator.h:114
friend class CommonIterator
Definition common_iterator.h:69
constexpr friend void tag_invoke(types::Tag< iterator_swap >, CommonIterator const &a, CommonIterator< It, St > const &b)
Definition common_iterator.h:119
constexpr void advance_one()
Definition common_iterator.h:64
constexpr auto operator*() const -> decltype(auto)
Definition common_iterator.h:35
Definition variant_forward_declaration.h:6
Definition operations.h:11
Definition operations.h:99
Definition operations.h:40
Definition operations.h:27
Definition sentinel_for.h:9
Definition sized_sentinel_for.h:9
Definition any_storable.h:9
constexpr auto iterator_move
Definition iterator_move.h:56
constexpr auto move
Definition move.h:38
constexpr auto iterator_swap
Definition iterator_swap.h:49
constexpr auto value
Definition value.h:34
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
constexpr auto get(T &&value) -> decltype(auto)
Definition get.h:8
constexpr auto c_
A value of type Constexpr<val>.
Definition constexpr.h:252
Definition forward_iterator_tag.h:6