std::partial_order
| ヘッダ <compare> で定義 |
||
| inline namespace /* 未指定 */ { inline constexpr /* 未指定 */ partial_order = /* 未指定 */; |
(C++20以降) | |
| 呼び出しシグネチャ |
||
| template< class T, class U > requires /* 以下を参照 */ |
||
3方向比較を使用して2つの値を比較し、std::partial_ordering型の結果を生成します。
tとuを式、TとUをそれぞれdecltype((t))とdecltype((u))とすると、std::partial_order(t, u)は式と同等です。
- もしstd::is_same_v<std::decay_t<T>, std::decay_t<U>>がtrueの場合
-
std::partial_orderの宣言を含まないコンテキストでオーバーロード解決が実行された整形式の式である場合、std::partial_ordering(partial_order(t, u))、 - そうでなければ、整形式である場合、std::partial_ordering(std::compare_three_way()(t, u))、
- そうでなければ、整形式である場合、std::partial_ordering(std::weak_order(t, u))。
-
- その他のすべての場合、式は不正形式であり、テンプレートインスタンス化の直接コンテキストに現れる場合、置換失敗を引き起こす可能性があります。
カスタマイゼーションポイントオブジェクト
std::partial_orderという名前は、リテラルなsemiregularクラス型のconstな関数オブジェクトであるカスタマイズポイントオブジェクトを表します。説明の便宜上、その型のcv非限定バージョンは__partial_order_fnと表記されます。
__partial_order_fnのすべてのインスタンスは等しいです。異なる型の__partial_order_fnのインスタンスを同じ引数で呼び出した場合の効果は、インスタンスを表す式がlvalueであるかrvalueであるか、const修飾されているかどうかにかかわらず、同等です(ただし、volatile修飾されたインスタンスは呼び出し可能である必要はありません)。したがって、std::partial_orderは自由にコピーでき、そのコピーは互換的に使用できます。
Args...の型のセットが与えられた場合、もしstd::declval<Args>()...が上記のstd::partial_orderの引数の要件を満たしていれば、__partial_order_fnは以下をモデル化します。
- std::invocable<__partial_order_fn, Args...>,
- std::invocable<const __partial_order_fn, Args...>,
- std::invocable<__partial_order_fn&, Args...>、および
- std::invocable<const __partial_order_fn&, Args...>.
そうでなければ、__partial_order_fnの関数呼び出し演算子はオーバーロード解決に参加しません。
[編集] 例
| このセクションは未完成です 理由: 例がありません |
[編集] 関連項目
| (C++20) |
6つすべての演算子をサポートし、置換可能ではなく、比較不可能な値を許容する三方比較の結果型 (クラス) |
| (C++20) |
三方比較を行い、std::strong_ordering 型の結果を生成する(カスタマイゼーションポイントオブジェクト) |
| (C++20) |
三方比較を行い、std::weak_ordering 型の結果を生成する(カスタマイゼーションポイントオブジェクト) |
operator<=> が利用できなくても、三方比較を行い std::partial_ordering 型の結果を生成する(カスタマイゼーションポイントオブジェクト) |