名前空間
変種
操作

std::compare_strong_order_fallback

From cppreference.com
< cpp‎ | utility
 
 
ユーティリティライブラリ
言語サポート
型のサポート (基本型、RTTI)
ライブラリ機能検査マクロ (C++20)
プログラムユーティリティ
可変引数関数
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
compare_strong_order_fallback
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

汎用ユーティリティ
関係演算子 (C++20で非推奨)
 
ヘッダ <compare> で定義
inline namespace /* 未指定 */ {

    inline constexpr /* 未指定 */
        compare_strong_order_fallback = /* 未指定 */;

}
(C++20以降)
呼び出しシグネチャ
template< class T, class U >

    requires /* 以下を参照 */
constexpr std::strong_ordering

    compare_strong_order_fallback( T&& t, U&& u ) noexcept(/* 以下参照 */);
(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 な式であれば、

t == u ? std::strong_ordering::equal :
t < u  ? std::strong_ordering::less :
         std::strong_ordering::greater

ただし、tu は一度だけ評価されます。

目次

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

上記以外の場合、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に変換可能であることを要求していました。
制約が強化されました。

[編集] 関連項目

三方比較を行い、std::strong_ordering 型の結果を生成する
(カスタマイゼーションポイントオブジェクト)[編集]
English 日本語 中文(简体) 中文(繁體)