std::ranges::less
From cppreference.com
< cpp | utility | functional
| ヘッダ <functional> で定義 |
||
| struct less; |
(C++20以降) | |
比較を実行するための関数オブジェクト。引数から関数呼び出し演算子のパラメータ型を推論します(返り値の型は推論しません)。
目次 |
[編集] ネストされた型
| ネストされた型 | 定義 |
is_transparent
|
unspecified |
[編集] メンバ関数
| operator() |
最初の引数が2番目の引数より小さいかどうかをチェックします。 (public member function) |
std::ranges::less::operator()
| template< class T, class U > constexpr bool operator()( T&& t, U&& u ) const; |
||
式 std::forward<T>(t) < std::forward<U>(u) を expr とします。
- 変換された t が変換された u より (両方とも型
P) ポインタに対する実装定義の厳密全順序 で前に来る場合、 true を返します。それ以外の場合は false を返します。 TからPへの変換シーケンス、またはUからPへの変換シーケンスが 等価性を保持しない 場合、動作は未定義です。
- 変換された t が変換された u より (両方とも型
- それ以外の場合
- expr の結果を返します。
- もし std::totally_ordered_with<T, U> がモデル化されない場合、動作は未定義です。
このオーバーロードは、std::totally_ordered_with<T, U> が満たされている場合にのみ、オーバーロード解決に参加します。
もし、型 T の式 expr1 と型 U の式 expr2 が存在し、 expr1 と expr2 の比較結果が 厳密全順序 (ルールは以下で定義) に違反する場合、動作は未定義です。
式 expr1 と expr2 の比較結果は、以下のいずれかの式が true である場合にのみ厳密全順序に従います。
- std::ranges::less{}(expr1, expr2)
- std::ranges::less{}(expr2, expr1)
- std::ranges::equal_to{}(expr1, expr2)
[編集] 注記
std::less とは異なり、 std::ranges::less は、 totally_ordered_with 制約により、6つの比較演算子 <, <=, >, >=, ==, != がすべて有効であることを要求します。
[編集] 例
| このセクションは未完成です 理由: 例がありません |
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 3530 | C++20 | ポインタを比較する際の構文チェックが緩和されました。 | 意味的な要件のみが緩和されています。 |
[編集] 関連項目
| x < y を実装する関数オブジェクト (クラステンプレート) |