名前空間
変種
操作

std::partial_order

提供: cppreference.com
< cpp‎ | utility
 
 
 
ヘッダ <compare> で定義
inline namespace /* unspecified */ {

    inline constexpr /* unspecified */ partial_order = /* unspecified */;

}
(C++20以上)
Call signature
template< class T, class U >

    requires /* see below */
constexpr std::partial_ordering

    partial_order(T&& t, U&& u) noexcept(/* see below */);

三方比較を用いて2つの値を比較し、 std::partial_ordering 型の結果を生成します。

t および u を式、 T および U をそれぞれ decltype((t)) および decltype((u)) とすると、 std::partial_order(t, u) は以下と expression-equivalent です。

  • std::is_same_v<std::decay_t<T>, std::decay_t<U>> == true の場合、
    • std::partial_ordering(partial_order(t, u))std​::​partial_order の宣言を含まない文脈で行われるオーバーロード解決を用いて well-formed な式であれば、その式。
    • そうでなく、 std::partial_ordering(t <=> u) が well-formed であれば、その式。
    • そうでなく、 std::partial_ordering(std::weak_order(t, u)) が well-formed であれば、その式。
    • そうでなければ、 ill-formed です。 テンプレート実体化の直接の文脈に現れた場合は痴漢失敗になります。
  • そうでなければ、 std::partial_order(t, u) は ill-formed です。

目次

[編集] expression-equivalent

e と式 f が同じ効果を持ち、どちらも潜在的に例外を投げるかどちらも潜在的に例外を投げない (すなわち noexcept(e) == noexcept(f)) であり、どちらも定数部分式であるかどちらも定数部分式でない場合、 ef と expression-equivalent です。

[編集] カスタマイゼーションポイントオブジェクト

名前 std::partial_orderカスタマイゼーションポイントオブジェクトを表します。 これは semiregularリテラルクラス型 (以下 partial_order_ftor(説明専用)) の関数オブジェクトです。 partial_order_ftor のすべてのインスタンスは等しいです。 すなわち、 std::partial_order は自由にコピーでき、そのコピーはお互いに交換可能です。

型の集合 Args... が与えられたとき、 std::declval<Args>()... が上記の std::partial_order の引数に対する要件を満たすならば、 partial_order_ftorstd::invocable<const partial_order_ftor&, Args...> を満たします。 そうでなければ、 partial_order_ftor の関数呼び出し演算子はオーバーロード解決に参加しません。

[編集] ノート

[編集]

[編集] 関連項目

6種類の演算子をすべてサポートし、代用可能でなく、比較不可能な値を許容する、三方比較の結果の型
(クラス) [edit]
三方比較を行い、 std::strong_ordering 型の結果を生成します
(カスタマイゼーションポイントオブジェクト) [edit]
三方比較を行い、 std::weak_ordering 型の結果を生成します
(カスタマイゼーションポイントオブジェクト) [edit]
三方比較を行い、 std::partial_ordering 型の結果を生成します (operator<=> が利用できない場合でも)
(カスタマイゼーションポイントオブジェクト) [edit]