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
>
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
=
|
(3) | (начиная с C++23) |
|
template
<
class
T
>
using iter_difference_t = /* см. ниже */ ; |
(4) | (начиная с C++20) |
|
template
<
/*dereferenceable*/
T
>
requires
/* см. ниже */
|
(5) | (начиная с C++20) |
|
template
<
std::
indirectly_readable
T
>
using
iter_common_reference_t
=
|
(6) | (начиная с C++20) |
|
Вспомогательные шаблоны
|
||
|
template
<
class
T
>
concept /*dereferenceable*/ = /* see below */ ; |
(7) | ( только для демонстрации* ) |
|
template
<
std::
indirectly_readable
T
>
using /*indirect-value-t*/ = /* см. ниже */ ; |
(8) | ( только для демонстрации* ) |
Вычислить ассоциированные типы итератора.
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 .
T
.
T
.
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 .
T
. Ограничение для этого псевдонима шаблона выполняется тогда и только тогда, когда выражение
ranges::
iter_move
(
std::
declval
<
T
&
>
(
)
)
является корректным и имеет ссылочный тип.
T
. Это общий ссылочный тип между его ссылочным типом и lvalue-ссылкой на его тип значения.
dereferenceable
удовлетворяется тогда и только тогда, когда выражение
*
std::
declval
<
T
&
>
(
)
является корректным и имеет
ссылочный тип
.
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 > для обработки таких случаев |
Смотрите также
|
(C++20)
|
определяет, что тип можно прочитать косвенно, применяя оператор
*
(концепт) |
|
(C++20)
|
определяет, что
semiregular
тип можно инкрементировать с помощью пре- и постинкрементных операторов
(концепт) |
|
(C++20)
|
вычисляет тип значения для
indirectly_readable
типа
(шаблон класса) |
|
(C++20)
|
вычисляет тип разности для
weakly_incrementable
типа
(шаблон класса) |
|
предоставляет единообразный интерфейс к свойствам итератора
(шаблон класса) |
|
|
(C++20)
(C++23)
(C++20)
(C++23)
|
получает типы итератора и сторожа диапазона
(псевдоним шаблона) |
|
(C++20)
(C++23)
(C++20)
(C++20)
|
получает ссылочные типы диапазона
(псевдоним шаблона) |
|
(C++20)
(C++20)
(C++20)
|
получает типы размера, разности и значения диапазона
(псевдоним шаблона) |