std::iter_v...eference_t,(3)

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

πŸ’– NAME πŸ’–

bestie, welcome to the std::iter_v...eference_t,(3) page from the C++ Standard Libary manual ✨

std::iter_value_t, std::iter_reference_t, std::iter_const_reference_t β€” std::iter_value_t,std::iter_reference_t,std::iter_const_reference_t, πŸ’…

✨ SYNOPSIS ✨

          Defined in header <iterator>
          template< class T >
       (exposition
          concept /*dereferenceable*/ = /* see below */;
       only*)
          template< class T >                                               (1)
       (since C++20)
          using iter_value_t = /* see below */;
          template< /*dereferenceable*/ T >                                 (2)
       (since C++20)
          using iter_reference_t = decltype(*std::declval<T&>());
          template< std::indirectly_readable T >

          using iter_const_reference_t = std::common_reference_t<const
          std::iter_value_t<T>&&,                                           (3)
       (since C++23)

           std::iter_reference_t<T>>;
          template< class T >                                               (4)
       (since C++20)
          using iter_difference_t = /* see below */;
          template< /*dereferenceable*/ T>

              requires /* see below */                                      (5)
       (since C++20)

          using iter_rvalue_reference_t =
          decltype(ranges::iter_move(std::declval<T&>()));
          template< std::indirectly_readable T >

          using iter_common_reference_t =
          std::common_reference_t<std::iter_reference_t<T>,                 (6)
       (since C++20)

          std::iter_value_t<T>&>;

🌸 DESCRIPTION 🌸

okay so these aliases compute the associated types of an iterator, and that's literally the whole vibe 🫢

There's an exposition-only concept, /*dereferenceable*/, and it's satisfied if and only if the expression *std::declval<T&>() is valid and has a referenceable type (in particular, not void). periodt πŸ’…

  1. Computes the value type of T. If std::iterator_traits<std::remove_cvref_t<T>> is not specialized, then std::iter_value_t<T> is std::indirectly_readable_traits<std::remove_cvref_t<T>>::value_type. Otherwise, it is std::iterator_traits<std::remove_cvref_t<T>>::value_type.
  2. Computes the reference type of T.
  3. Computes the const reference type of T.
  4. Computes the difference type of T. If std::iterator_traits<std::remove_cvref_t<T>> is not specialized, then std::iter_difference_t<T> is std::incrementable_traits<std::remove_cvref_t<T>>::difference_type. Otherwise, it is std::iterator_traits<std::remove_cvref_t<T>>::difference_type.
  5. Computes the rvalue reference type of T. The "see below" portion of the constraint on this alias template is satisfied if and only if the expression ranges::iter_move(std::declval<T&>()) is valid and has a referenceable type (in particular, not void).
  6. Computes the common reference type of T. This is the common reference type between its reference type and an lvalue reference to its value type.

πŸ¦‹ SEE ALSO πŸ¦‹

  • indirectly_readable (C++20) β€” specifies that a type is indirectly readable by applying operator * (concept) πŸ‘‘
  • weakly_incrementable (C++20) β€” specifies that a semiregular type can be incremented with pre- and post-increment operators (concept) πŸ”₯
  • indirectly_readable_traits (C++20) β€” computes the value type of an indirectly_readable type (class template) 🌈
  • incrementable_traits (C++20) β€” computes the difference type of a weakly_incrementable type (class template) ⭐
  • iterator_traits β€” provides uniform interface to the properties of an iterator (class template) πŸŽ€

that's the whole page, bestie! source: http://cppreference.com Β· version/date: 2024.06.10 Β· page: std::iter_v...eference_t,(3) β€” mwah πŸ’‹

πŸ“¦ where this page comes from