Namespaces
Variants

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

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
iter_value_t iter_difference_t iter_reference_t iter_const_reference_t iter_rvalue_reference_t iter_common_reference_t
(C++20) (C++20) (C++20) (C++23) (C++20) (C++20)
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
Определено в заголовке <iterator>
template < class T >
using iter_value_t = /* см. ниже */ ;
(1) (начиная с C++20)
template < /*разыменовываемый*/ 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 = /* см. ниже */ ;
(4) (начиная с C++20)
template < /*dereferenceable*/ T >

requires /* см. ниже */
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 > ,

/*тип-косвенного-значения*/ < T >> ;
(6) (начиная с C++20)
Вспомогательные шаблоны
template < class T >
concept /*dereferenceable*/ = /* see below */ ;
(7) ( только для демонстрации* )
template < std:: indirectly_readable T >
using /*indirect-value-t*/ = /* см. ниже */ ;
(8) ( только для демонстрации* )

Вычислить ассоциированные типы итератора.

1) Вычисляет value type для T .
2) Вычисляет reference type для T .
3) Вычисляет const reference type для T .
4) Вычисляет тип разности для T .
5) Вычисляет тип rvalue-ссылки для T . Ограничение для этого псевдонима шаблона выполняется тогда и только тогда, когда выражение ranges:: iter_move ( std:: declval < T & > ( ) ) является корректным и имеет ссылочный тип.
6) Вычисляет общий ссылочный тип для T . Это общий ссылочный тип между его ссылочным типом и lvalue-ссылкой на его тип значения.
7) Экспозиционное понятие dereferenceable удовлетворяется тогда и только тогда, когда выражение * std:: declval < T & > ( ) является корректным и имеет ссылочный тип .
8) Экспозиционный псевдоним шаблона indirect-value-t обозначает следующее:
  • std:: invoke_result_t < Proj & , /*indirect-value-t*/ < I >> если T совпадает с std :: projected < I, Proj > для некоторых типов I и Proj .
  • В противном случае, std :: iter_value_t < T > & .

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
P2609R3 C++20 std::iter_common_reference_t был определён через
std :: iter_value_t < T > & что некорректно обрабатывало
std::projected типы, проецирующие в типы rvalue-ссылок
определён через
/*indirect-value-t*/ < T >
для обработки таких случаев

Смотрите также

определяет, что тип можно прочитать косвенно, применяя оператор *
(концепт)
определяет, что semiregular тип можно инкрементировать с помощью пре- и постинкрементных операторов
(концепт)
вычисляет тип значения для indirectly_readable типа
(шаблон класса)
вычисляет тип разности для weakly_incrementable типа
(шаблон класса)
предоставляет единообразный интерфейс к свойствам итератора
(шаблон класса)
получает типы итератора и сторожа диапазона
(псевдоним шаблона)
получает ссылочные типы диапазона
(псевдоним шаблона)
получает типы размера, разности и значения диапазона
(псевдоним шаблона)