std::compare_partial_order_fallback
| ヘッダ <compare> で定義 |
||
| inline namespace /* 未指定 */ { inline constexpr /* 未指定 */ |
(C++20以降) | |
| 呼び出しシグネチャ |
||
| template< class T, class U > requires /* 以下を参照 */ |
(C++20以降) | |
サブ式 t と u に対して3項比較を実行し、演算子 <=> が利用できない場合でも、型 std::partial_ordering の結果を生成します。
もし std::decay_t<T> と std::decay_t<U>> が同じ型であれば、std::compare_partial_order_fallback(t, u) は、もしそれがwell-formedな式であれば、
- std::partial_order(t, u) と式として同等(expression-equivalent)です。
- そうでなければ、 t == u ? std::partial_ordering::equivalent :
t < u ? std::partial_ordering::less :
u < t ? std::partial_ordering::greater :
std::partial_ordering::unordered、式 t == u、t < u、および u < t がすべてwell-formedであり、かつ decltype(t == u)、decltype(t < u)、decltype(u < t) のそれぞれが boolean-testable をモデルとする場合。ただし、 t と u は一度だけ評価されます。
上記以外のすべてのケースでは、std::compare_partial_order_fallback(t, u) はill-formedであり、テンプレートインスタンス化の直接のコンテキストに現れる場合には 置換失敗 を引き起こす可能性があります。
目次 |
カスタマイゼーションポイントオブジェクト
std::compare_partial_order_fallback という名前は、関数オブジェクトであり、リテラルな semiregular クラス型の定数です。説明のために、その型のcv修飾されていないバージョンは __compare_partial_order_fallback_fn と表記されます。
__compare_partial_order_fallback_fn のすべてのインスタンスは等価です。同じ引数に対して呼び出された __compare_partial_order_fallback_fn の異なるインスタンスの動作は、インスタンスを表す式がlvalueかrvalueか、またconst修飾されているか否かに関わらず同等です(ただし、volatile修飾されたインスタンスの呼び出しは保証されません)。したがって、std::compare_partial_order_fallback は自由にコピーでき、そのコピーは相互に交換可能に使用できます。
型のセット Args... が与えられた場合、 std::declval<Args>()... が上記の std::compare_partial_order_fallback の引数要件を満たす場合、__compare_partial_order_fallback_fn は
- std::invocable<__compare_partial_order_fallback_fn, Args...>,
- std::invocable<const __compare_partial_order_fallback_fn, Args...>,
- std::invocable<__compare_partial_order_fallback_fn&, Args...>、および
- std::invocable<const __compare_partial_order_fallback_fn&, Args...>.
をモデルとします。それ以外の場合、__compare_partial_order_fallback_fn の関数呼び出し演算子はオーバーロード解決に参加しません。
[編集] 例
| このセクションは未完成です 理由: 例がありません |
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 2114 (P2167R3) |
C++20 | [編集] 不具合報告 フォールバックメカニズムは、戻り値の型がboolに変換可能であることを要求していました。 |
制約が強化されました。 |
| LWG 3465 | C++20 | フォールバックメカニズムは u < t がwell-formedであることを要求していませんでした。 | 必要 |
| LWG 4157 | C++20 | P2167R3 は LWG issue 3465 の解決を上書きしました。 | 解決を復元しました。 |
[編集] 関連項目
| (C++20) |
三方比較を行い、std::partial_ordering 型の結果を生成する(カスタマイゼーションポイントオブジェクト) |