std::ranges::iter_move
| ヘッダ <iterator> で定義 |
||
| inline namespace /* 未指定 */ { inline constexpr /* 未指定 */ iter_move = /* 未指定 */; |
(C++20以降) (カスタマイズポイントオブジェクト) |
|
| 呼び出しシグネチャ |
||
| template< class T > requires /* 以下を参照 */ |
(C++20以降) | |
指定されたイテレータから、rvalue参照またはprvalueの一時オブジェクトを取得します。
ranges::iter_move(t) は、t がクラス型または列挙型であり、かつその式が 評価されないオペランドとして扱われた場合に、意味的に等価な式
- となります。この場合、
iter_moveの オーバーロード解決 は、引数依存名前探索によって見つかった候補のみで行われます。 - それ以外の場合は、*t が意味的に等価な式であり、lvalueである場合、std::move(*t) となります。
- それ以外の場合は、*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 は以下をモデル化します。
- std::invocable<__iter_move_fn, Args...>,
- std::invocable<const __iter_move_fn, Args...>,
- std::invocable<__iter_move_fn&, Args...>、および
- std::invocable<const __iter_move_fn&, Args...>.
それ以外の場合、__iter_move_fn の関数呼び出し演算子はオーバーロード解決に参加しません。
[編集] 例
| このセクションは未完成です 理由: 例がありません |
[編集] 関連項目
| (C++20) |
調整された基礎となるイテレータの逆参照結果を、関連する右辺値参照型にキャストする (関数) |
| (C++20) |
基底イテレータの間接参照の結果を関連する右辺値参照型にキャストする (関数) |