最終更新日時(UTC):
が更新

履歴 編集

function
<exposition-only>

synth-three-way-result(C++20)

constexpr auto synth-three-way =                           // (1) C++20
  []<class T, class U>(const T& t, const U& u)
    requires requires {
      { t < u } -> boolean-testable ;
      { u < t } -> boolean-testable ;
    }
  {
    if constexpr (three_way_comparable_with<T, U>) {
      return t <=> u;
    } else {
      if (t < u) return weak_ordering::less;
      if (u < t) return weak_ordering::greater;
      return weak_ordering::equivalent;
   }
};

template <class T, class U=T>
using synth-three-way-result =
  decltype(synth-three-way(declval<T&>(), declval<U&>())); // (2) C++20

概要

  • (1) : 型Tと型Uが三方比較可能であればそれを行い、そうでなければweak_orderingとして三方比較を実装して関数オブジェクト
  • (2) : synth-three-way-resultでの比較結果の型

バージョン

言語

  • C++20

参照