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 на тип значения.
См. также
|
(C++20) |
определяет, что тип является косвенно читаемым путём применения оператора * (концепция) |
|
(C++20) |
определяет, что тип semiregular может быть инкрементирован с помощью префиксного и постфиксного операторов инкремента (концепция) |
|
(C++20) |
вычисляет тип значения типа indirectly_readable (шаблон класса) |
|
(C++20) |
вычисляет тип разницы для типа weakly_incrementable (шаблон класса) |
| предоставляет единый интерфейс к свойствам итератора (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/iterator/iter_t