名前空間
変種
操作

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.com
 
 
イテレータライブラリ
イテレータのコンセプト
イテレータのプリミティブ
iter_value_titer_difference_titer_reference_titer_const_reference_titer_rvalue_reference_titer_common_reference_t
(C++20)(C++20)(C++20)(C++23)(C++20)(C++20)
アルゴリズムのコンセプトとユーティリティ
間接呼び出し可能コンセプト
共通アルゴリズム要件
(C++20)
(C++20)
(C++20)
ユーティリティ
(C++20)
イテレータアダプタ
Rangeアクセス
(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< /* 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 = /* 以下参照 */;
(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>,

                            /* indirect-value-t */<T>>;
(6) (C++20以降)
ヘルパーテンプレート
template< class T >
concept /* dereferenceable */ = /* 以下参照 */;
(7) (説明用*)
template< std::indirectly_readable T >
using /* indirect-value-t */ = /* 以下参照 */;
(8) (説明用*)

イテレータの関連型を計算します。

1) T値型を計算します。
2) T参照型を計算します。
3) Tconst参照型を計算します。
4) T差分型を計算します。
5) T右辺値参照型を計算します。このエイリアステンプレートの制約は、式 ranges::iter_move(std::declval<T&>()) が有効であり、参照可能な型を持つ場合にのみ満たされます。
6) T共通参照型を計算します。これは、その参照型と値型の左辺値参照との共通参照型です。
7) 公開用のコンセプトdereferenceableは、式 *std::declval<T&>() が有効であり、参照可能な型を持つ場合にのみ満たされます。
8) 公開用のエイリアステンプレートindirect-value-tは、以下を示します。
  • std::invoke_result_t<Proj&, /* indirect-value-t */<I>>、もし T が、ある型 IProj に関して 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>
これらのケースを処理するために

[編集] 関連項目

型が演算子 * を適用することで間接的に読み取り可能であることを規定する
(コンセプト) [編集]
semiregular 型が前置および後置インクリメント演算子でインクリメントできることを規定する
(コンセプト) [編集]
indirectly_readable 型の値型を計算する
(クラステンプレート) [編集]
weakly_incrementable 型の差分型を計算する
(クラステンプレート) [編集]
イテレータのプロパティへの統一的なインターフェースを提供する
(クラステンプレート) [編集]
rangeのイテレータ型と番兵型を取得する
(エイリアステンプレート)[編集]
rangeの参照型を取得する
(エイリアステンプレート)[編集]
rangeのサイズ型、差分型、値型を取得する
(エイリアステンプレート)[編集]
English 日本語 中文(简体) 中文(繁體)