52template<concepts::Copyable T, concepts::Semiregular Bound = UnreachableSentinel>
 
   71              meta::Conditional<detail::IotaAdvancable<T>, RandomAccessIteratorTag,
 
   72                                meta::Conditional<detail::IotaDecrementable<T>, BidirectionalIteratorTag,
 
   73                                                  meta::Conditional<detail::IotaIncrementable<T>, ForwardIteratorTag,
 
   81        constexpr explicit Iterator(T value) : m_value(value) {}
 
   83        Iterator(Iterator 
const&) = 
default;
 
   84        Iterator(Iterator&&) = 
default;
 
   86        auto operator=(Iterator 
const&) -> Iterator& = 
default;
 
   87        auto operator=(Iterator&&) -> Iterator& = 
default;
 
   89        Iterator(Iterator 
const&)
 
   95        constexpr auto operator*() 
const -> T { 
return m_value; }
 
   97        constexpr void advance_one() { ++m_value; }
 
   99        constexpr void back_one()
 
  105        constexpr void advance_n(SSizeType n)
 
  110                    m_value += 
static_cast<T
>(n);
 
  112                    m_value -= 
static_cast<T
>(-n);
 
  121        friend class Sentinel;
 
  123        constexpr friend auto operator==(Iterator 
const& a, Iterator 
const& b) -> 
bool 
  126            return a.m_value == b.m_value;
 
  129        constexpr friend auto operator<=>(Iterator 
const& a, Iterator 
const& b)
 
  132            return a.m_value <=> b.m_value;
 
  135        constexpr friend auto operator-(Iterator 
const& a, Iterator 
const& b) -> SSizeType
 
  139                return static_cast<SSizeType
>(
static_cast<SSizeType
>(a.m_value) - 
static_cast<SSizeType
>(b.m_value));
 
  141                return b.m_value > a.m_value ? 
static_cast<SSizeType
>(-
static_cast<SSizeType
>(b.m_value - a.m_value))
 
  142                                             : 
static_cast<SSizeType
>(a.m_value - b.m_value);
 
  144                return a.m_value - b.m_value;
 
  154        constexpr Sentinel() = 
default;
 
  155        constexpr explicit Sentinel(Bound bound) : m_bound(bound) {}
 
  157        constexpr auto difference(Iterator 
const& a) 
const -> SSizeType { 
return -(a.m_value - this->m_bound); }
 
  162        constexpr friend auto operator==(Iterator 
const& a, Sentinel 
const& b) -> 
bool {
 
  163            return a.m_value == b.m_bound;
 
  174    constexpr explicit IotaView(T value) : m_value(value) {}
 
  180        : m_value(first.m_value), m_bound(last.m_value) {}
 
 
  184        : m_value(first.m_value), m_bound(last.m_bound) {}
 
 
  187    requires(!is_bounded)
 
  188        : m_value(first.m_value) {}
 
 
  190    constexpr auto begin() const -> Iterator { 
return Iterator(m_value); }
 
  192    constexpr auto end()
 const {
 
  193        if constexpr (is_bounded) {
 
  194            return Sentinel(m_bound);
 
 
  200    constexpr auto end() const -> Iterator
 
  201    requires(
concepts::SameAs<T, Bound>)
 
  203        return Iterator(m_bound);
 
 
  207    requires((
concepts::SameAs<T, Bound> && 
detail::IotaAdvancable<T>) ||
 
 
  222    template<concepts::OneOf<Iterator, meta::Conditional<is_bounded, Sentinel, UnreachableSentinel>> Sent>
 
  228            return IotaView(util::move(first), util::move(last));
 
 
 
  236template<
typename T, 
typename Bound>
 
  237requires(!concepts::Integer<T> || !concepts::Integer<Bound> ||
 
  238         concepts::SignedInteger<T> == concepts::SignedInteger<Bound>)
 
Definition iota_view.h:60
 
constexpr auto size() const
Definition iota_view.h:206
 
constexpr IotaView(Iterator first, UnreachableSentinel)
Definition iota_view.h:186
 
constexpr IotaView()=default
 
constexpr friend auto tag_invoke(types::Tag< container::reconstruct >, Iterator first, Sent last)
Definition iota_view.h:223
 
constexpr IotaView(T value)
Definition iota_view.h:174
 
constexpr auto begin() const -> Iterator
Definition iota_view.h:190
 
constexpr IotaView(Iterator first, Iterator last)
Definition iota_view.h:178
 
constexpr IotaView(Iterator first, Sentinel last)
Definition iota_view.h:182
 
constexpr auto end() const
Definition iota_view.h:192
 
constexpr IotaView(meta::TypeIdentity< T > value, meta::TypeIdentity< Bound > bound)
Definition iota_view.h:176
 
constexpr auto end() const -> Iterator requires(concepts::SameAs< T, Bound >)
Definition iota_view.h:200
 
Definition sentinel_base.h:13
 
Definition view_interface.h:26
 
Definition operations.h:99
 
Definition operations.h:27
 
Definition language.h:215
 
Definition language.h:241
 
Definition language.h:244
 
Definition iota_view.h:40
 
Definition iota_view.h:34
 
Definition iota_view.h:28
 
Definition any_storable.h:9
 
IotaView(T, Bound) -> IotaView< T, Bound >
 
constexpr auto operator<=>(MoveIterator< Iter > const &a, MoveIterator< U > const &b)
Definition move_iterator.h:90
 
constexpr auto operator-(MoveIterator< Iter > const &a, MoveIterator< U > const &b) -> decltype(a.base() - b.base())
Definition move_iterator.h:95
 
constexpr auto unreachable_sentinel
Definition unreachable_sentinel.h:11
 
constexpr auto operator==(MoveIterator< Iter > const &a, MoveIterator< U > const &b) -> bool
Definition move_iterator.h:85
 
constexpr auto to_unsigned
Definition to_unsigned.h:16
 
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
 
Definition enable_borrowed_container.h:9
 
Definition iterator_base.h:14
 
Definition unreachable_sentinel.h:4