std::ranges...sentinel_t,(3)

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

🌸 NAME 🌸

okay so bestie, welcome to the C++ Standard Library manual page std::ranges...sentinel_t,(3) β€” yes the title is a little cursed but we move πŸ’…. This page is the group chat for std::ranges::iterator_t, std::ranges::const_iterator_t, and std::ranges::sentinel_t. The original NAME line repeats the squad after the dash too: std::ranges::iterator_t, std::ranges::const_iterator_t, std::ranges::sentinel_t. No cap, that's the name zone.


✨ Synopsis ✨

also hanging at the top of the synopsis: std::ranges::range_value_t, std::ranges::range_reference_t.

Defined in header <ranges>.

template< class T >
using iterator_t = decltype(ranges::begin(std::declval<T&>()));

template< ranges::range R >
using const_iterator_t = decltype(ranges::cbegin(std::declval<R&>()));

template< ranges::range R >
using sentinel_t = decltype(ranges::end(std::declval<R&>()));

template< ranges::range R >
using const_sentinel_t = decltype(ranges::cend(std::declval<R&>()));

template< ranges::sized_range R >
using range_size_t = decltype(ranges::size(std::declval<R&>()));

template< ranges::range R >
using range_difference_t = std::iter_difference_t<ranges::iterator_t<R>>;

template< ranges::range R >
using range_value_t = std::iter_value_t<ranges::iterator_t<R>>;

template< ranges::range R >
using range_reference_t = std::iter_reference_t<ranges::iterator_t<R>>;

template< ranges::range R >
using range_const_reference_t = std::iter_const_reference_t<ranges::iterator_t<R>>;

template< ranges::range R >
using range_rvalue_reference_t = std::iter_rvalue_reference_t<ranges::iterator_t<R>>;

template< ranges::range R >
using range_common_reference_t = std::iter_common_reference_t<ranges::iterator_t<R>>;
  1. (1) β€” since C++20 β€” used to obtain the iterator type of the type T.
  2. (2) β€” since C++23 β€” used to obtain the constant iterator type of the range type R.
  3. (3) β€” since C++20 β€” used to obtain the sentinel type of the range type R.
  4. (4) β€” since C++23 β€” used to obtain the constant sentinel type of the range type R.
  5. (5) β€” since C++20 β€” used to obtain the size type of the sized_range type R.
  6. (6) β€” since C++20 β€” used to obtain the difference type of the iterator type of range type R.
  7. (7) β€” since C++20 β€” used to obtain the value type of the iterator type of range type R.
  8. (8) β€” since C++20 β€” used to obtain the reference type of the iterator type of range type R.
  9. (9) β€” since C++23 β€” used to obtain the constant reference type of the iterator type of range type R.
  10. (10) β€” since C++20 β€” used to obtain the rvalue reference type of the iterator type of range type R.
  11. (11) β€” since C++20 β€” used to obtain the common reference type of the iterator type of range type R.

🧚 Template parameters 🧚

  • T β€” a type that can be used in std::ranges::begin.
  • R β€” a range type or a sized_range type.

πŸ’œ Notes πŸ’œ

important note, bestie: iterator_t can be applied to non-range types, e.g. arrays with unknown bound. That's the whole note and it's lowkey iconic.

πŸ’€ Defect reports πŸ’€

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

  • DR: LWG 3860 β€” Applied to: C++20 β€” behavior as published: range_common_reference_t was missing β†’ correct behavior: added.
  • DR: LWG 3946 β€” Applied to: C++23 β€” behavior as published: const_iterator_t and const_sentinel_t were inconsistent with the result of ranges::cbegin and ranges::cend respectively β†’ correct behavior: tweaked.

🫢 See also 🫢

The See also crew, with their standards tags:

  • iter_value_t (C++20) (alias template)
  • iter_reference_t (C++20)
  • iter_const_reference_t (C++23)
  • iter_difference_t (C++20)
  • iter_rvalue_reference_t (C++20)
  • iter_common_reference_t (C++20)

They compute the associated types of an iterator. iykyk ✨


mwah πŸ’‹ source/version/date: http://cppreference.com Β· 2024.06.10 Β· std::ranges...sentinel_t,(3). periodt πŸŽ€

πŸ“¦ where this page comes from