Spec-Zone.ru › C++

std::iter_value_t, std::iter_reference_t, std::iter_const_reference_t, std::iter_difference_t, std::iter_rvalue_reference_t, std::iter_common_reference_t

Определено в заголовке <iterator>
template< class T >
concept /*dereferenceable*/ = /* see below */;
(только для демонстрации*)
template< class T >
using iter_value_t = /* see below */;
(1) (с C++20)
template< /*dereferenceable*/ T >
using iter_reference_t = decltype(*std::declval<T&>());
(2) (с C++20)
template< std::indirectly_readable T >
using iter_const_reference_t = std::common_reference_t<const std::iter_value_t<T>&&,
                                                       std::iter_reference_t<T>>;
(3) (с C++23)
template< class T >
using iter_difference_t = /* see below */;
(4) (с C++20)
template< /*dereferenceable*/ T>
    requires /* see below */
using iter_rvalue_reference_t = decltype(ranges::iter_move(std::declval<T&>()));
(5) (с C++20)
template< std::indirectly_readable T >
using iter_common_reference_t = std::common_reference_t<std::iter_reference_t<T>,
                                                        std::iter_value_t<T>&>;
(6) (с C++20)

Вычисляет связанные типы итератора. Концепция dereferenceable (только для демонстрации) удовлетворяется тогда и только тогда, когда выражение *std::declval<T&>() является допустимым и имеет ссылочный тип (в частности, не void).

1) Вычисляет тип значения для T. Если std::iterator_traits<std::remove_cvref_t<T>> не специализирована, то std::iter_value_t<T> является std::indirectly_readable_traits<std::remove_cvref_t<T>>::value_type. В противном случае, это std::iterator_traits<std::remove_cvref_t<T>>::value_type.
2) Вычисляет тип ссылки для T.
3) Вычисляет тип константной ссылки для T.
4) Вычисляет тип разницы для T. Если std::iterator_traits<std::remove_cvref_t<T>> не специализирована, то std::iter_difference_t<T> является std::incrementable_traits<std::remove_cvref_t<T>>::difference_type. В противном случае, это std::iterator_traits<std::remove_cvref_t<T>>::difference_type.
5) Вычисляет тип rvalue ссылки для T. Часть «см. ниже» ограничения для этого шаблона-функции удовлетворяется тогда и только тогда, когда выражение ranges::iter_move(std::declval<T&>()) является допустимым и имеет ссылочный тип (в частности, не void).
6) Вычисляет общий тип ссылки для T. Это общий тип ссылки между типом ссылки и ссылкой lvalue на тип значения.

См. также

indirectly_readable
(C++20)
определяет, что тип является косвенно читаемым путём применения оператора *
(концепция)
weakly_incrementable
(C++20)
определяет, что тип semiregular может быть инкрементирован с помощью префиксного и постфиксного операторов инкремента
(концепция)
indirectly_readable_traits
(C++20)
вычисляет тип значения типа indirectly_readable
(шаблон класса)
incrementable_traits
(C++20)
вычисляет тип разницы для типа weakly_incrementable
(шаблон класса)
iterator_traits
предоставляет единый интерфейс к свойствам итератора
(шаблон класса)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/iterator/iter_t

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API