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