std::ranges...w::sentinel(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ’– std::ranges...w::sentinel(3) πŸ’–

okay so bestie, this is the manual page for std::ranges...w::sentinel from the C++ Standard Libary β€” yes, that's the manual name, and we're keeping it exactly like that. it's C++20 template territory, so grab a lil snack πŸ“ and let's get into it. no cap, this one is niche but iconic.


✨ NAME ✨

std::ranges::iota_view::sentinel β€” and the NAME line literally repeats it: std::ranges::iota_view::sentinel - std::ranges::iota_view::sentinel. matching set energy, periodt πŸ’…


🌸 Synopsis 🌸

struct /*sentinel*/;  (since C++20)
                      (exposition only*)

so this is struct /*sentinel*/; since C++20, and it's literally marked exposition only*. the way that it works: it's the return type of iota_view::end, used when the iota_view is bounded (i.e. Bound is not std::unreachable_sentinel_t) and Bound and W are not the same type. that's the whole vibe check πŸ¦‹


πŸŽ€ Member functions πŸŽ€

πŸ’… std::ranges::iota_view::sentinel::sentinel

/*sentinel*/() = default;                       (1) (since C++20)
constexpr explicit /*sentinel*/( Bound bound ); (2) (since C++20)
  • (1) β€” /*sentinel*/() = default; (since C++20). Value-initializes bound_ via its default member initializer (= Bound()). default constructor ate, no notes ✨
  • (2) β€” constexpr explicit /*sentinel*/( Bound bound ); (since C++20). Initializes bound_ with bound. explicit and unbothered πŸ’…

πŸ”₯ Non-member functions πŸ”₯

vibe check before we start: in the following descriptions, value_ is an underlying data member of iterator from which its operator* copies. copy that, bestie 🫢

✨ operator==(std::ranges::iota_view::iterator, std::ranges::iota_view::sentinel)

friend constexpr bool operator==( const /*iterator*/& x,    (since C++20)
                                  const /*sentinel*/& y );

Equivalent to: return x.value_ == y.bound_;.

The != operator is synthesized from operator==. not me loving synthesized operators 😭

this function is not visible to ordinary unqualified or qualified lookup, and can only be found by argument-dependent lookup when sentinel is an associated class of the arguments. so don't go looking for it with a plain name, iykyk πŸ”πŸ’€

🌈 operator-(std::ranges::iota_view::iterator, std::ranges::iota_view::sentinel)

friend constexpr std::iter_difference_t<W>

    operator-(const /*iterator*/& x, const /*sentinel*/& y) (1)
(since C++20)

    requires std::sized_sentinel_for<Bound, W>;
friend constexpr std::iter_difference_t<W>

    operator-(const /*sentinel*/& x, const /*iterator*/& y) (2)
(since C++20)

    requires std::sized_sentinel_for<Bound, W>;
  1. Equivalent to return x.value_ - y.bound_;.
  2. Equivalent to return -(y.value_ - x.bound_);.

These functions are not visible to ordinary unqualified or qualified lookup, and can only be found by argument-dependent lookup when sentinel is an associated class of the arguments. fr fr, ADL only β€” that's the rule, bestie 🫢


mwah πŸ’‹ this page came from http://cppreference.com, dated 2024.06.10, and the footer id is std::ranges...w::sentinel(3). byeee, go drink water and maybe touch grass 🌱🫢

πŸ“¦ where this page comes from