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
<
/*dereferenceable*/
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
の
const reference type
を計算します。
T
の
difference type
を計算する。
- 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
の
rvalue reference type
を計算する。このエイリアステンプレートの制約は、
ranges::
iter_move
(
std::
declval
<
T
&
>
(
)
)
という式が有効であり、かつ参照可能な型を持つ場合にのみ満たされる。
T
の
共通参照型
を計算します。これは、その参照型とその値型への左辺値参照との間の共通参照型です。
indirect-value-t
は以下を示す:
-
std::
invoke_result_t
<
Proj
&
,
/*indirect-value-t*/
<
I
>>
の場合、
Tが何らかの型IおよびProjに対する std :: projected < I, Proj > と同一であるとき。 - それ以外の場合、 std :: iter_value_t < T > & 。
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| P2609R3 | C++20 |
std::iter_common_reference_t
は
std :: iter_value_t < T > & に基づいて定義されており、 右辺値参照型に投影する std::projected 型を 誤って扱っていた |
/*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)
|
範囲のサイズ型、差分型、値型を取得する
(エイリアステンプレート) |