std::compare_strong_order_fallback
ヘッダ <compare> で定義 | ||
inlinenamespace/* unspecified */{ inlineconstexpr/* unspecified */ | (C++20以上) | |
Call signature | ||
template<class T, class U > requires /* see below */ | ||
t
と u
に対して三方比較を行い、 std::strong_ordering 型の結果を生成します (演算子 <=>
が利用できない場合でも)。
t
および u
を式、 T
および U
がそれぞれ decltype((t)) および decltype((u)) とすると、 std::compare_strong_order_fallback(t, u) は以下と expression-equivalent です。
- std::is_same_v<std::decay_t<T>, std::decay_t<U>>==true の場合、
- std::strong_order(t, u) が well-formed であれば、その式。
- そうでなく、 t == u と t < u がどちらも well-formed かつ bool に変換可能であれば、以下の式。
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 です。
目次 |
[編集]expression-equivalent
式 e と式 f が同じ効果を持ち、どちらも潜在的に例外を投げるかどちらも潜在的に例外を投げない (すなわち noexcept(e)==noexcept(f)) であり、どちらも定数部分式であるかどちらも定数部分式でない場合、 e は f と expression-equivalent です。
[編集]カスタマイゼーションポイントオブジェクト
名前 std::compare_strong_order_fallback
はカスタマイゼーションポイントオブジェクトを表します。 これは semiregular なリテラルクラス型 (以下 compare_strong_order_fallback_ftor
(説明専用)) の const な関数オブジェクトです。 compare_strong_order_fallback_ftor
のすべてのインスタンスは等しいです。 すなわち、 std::compare_strong_order_fallback
は自由にコピーでき、そのコピーはお互いに交換可能です。
型の集合 Args...
が与えられたとき、 std::declval<Args>()... が上記の std::compare_strong_order_fallback
の引数に対する要件を満たすならば、 compare_strong_order_fallback_ftor
は std::invocable<const compare_strong_order_fallback_ftor&, Args...> を満たします。 そうでなければ、 compare_strong_order_fallback_ftor
の関数呼び出し演算子はオーバーロード解決に参加しません。
[編集]例
This section is incomplete Reason: no example |
[編集]関連項目
(C++20) | 三方比較を行い、 std::strong_ordering 型の結果を生成します (カスタマイゼーションポイントオブジェクト) |