名前空間
変種
操作

std::ranges::iter_move

From cppreference.com
 
 
イテレータライブラリ
イテレータのコンセプト
イテレータのプリミティブ
アルゴリズムのコンセプトとユーティリティ
間接呼び出し可能コンセプト
共通アルゴリズム要件
(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> で定義
inline namespace /* 未指定 */ {

    inline constexpr /* 未指定 */ iter_move = /* 未指定 */;

}
(C++20以降)
(カスタマイズポイントオブジェクト)
呼び出しシグネチャ
template< class T >

    requires /* 以下を参照 */

constexpr decltype(auto) iter_move( T&& t ) noexcept(/* 以下参照 */);
(C++20以降)

指定されたイテレータから、rvalue参照またはprvalueの一時オブジェクトを取得します。

ranges::iter_move(t) は、t がクラス型または列挙型であり、かつその式が 評価されないオペランドとして扱われた場合に、意味的に等価な式

  1. となります。この場合、iter_moveオーバーロード解決 は、引数依存名前探索によって見つかった候補のみで行われます。
  2. それ以外の場合は、*t が意味的に等価な式であり、lvalueである場合、std::move(*t) となります。
  3. それ以外の場合は、*t が意味的に等価な式であり、rvalueである場合、*t となります。

上記以外の場合、ranges::iter_move の呼び出しは無効であり、ranges::iter_move(e) がテンプレートインスタンス化の即時コンテキストに現れる場合、置換失敗につながる可能性があります。

ranges::iter_move(e)*e と等しくない場合、プログラムは診断なしで無効となります。

カスタマイゼーションポイントオブジェクト

ranges::iter_move という名前は、関数オブジェクトであり、リテラルsemiregular クラス型の定数です。説明のため、その型から cv 修飾を除いたものを __iter_move_fn と表記します。

__iter_move_fn のすべてのインスタンスは等価です。同じ引数に対して異なる __iter_move_fn 型のインスタンスを呼び出す効果は、インスタンスを示す式がlvalueかrvalueか、またconst修飾されているかどうかにかかわらず同等です(ただし、volatile修飾されたインスタンスは呼び出し可能である必要はありません)。したがって、ranges::iter_move は自由にコピーでき、そのコピーは互換性があります。

型のセット Args... が与えられた場合、std::declval<Args>()... が上記の ranges::iter_move への引数の要件を満たす場合、__iter_move_fn は以下をモデル化します。

それ以外の場合、__iter_move_fn の関数呼び出し演算子はオーバーロード解決に参加しません。

[編集]

[編集] 関連項目

(C++20)
調整された基礎となるイテレータの逆参照結果を、関連する右辺値参照型にキャストする
(関数) [編集]
(C++20)
基底イテレータの間接参照の結果を関連する右辺値参照型にキャストする
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)