std:: three_way_comparable, std:: three_way_comparable_with
|
定義済みヘッダー
<compare>
|
||
|
template
<
class
T,
class
Cat
=
std::
partial_ordering
>
concept three_way_comparable
=
|
(1) | (C++20以降) |
|
template
<
class
T,
class
U,
class
Cat
=
std::
partial_ordering
>
concept three_way_comparable_with
=
|
(2) | (C++20以降) |
|
template
<
class
T,
class
Cat
>
concept __ComparesAs
=
|
(3) | ( 説明専用* ) |
std::three_way_comparable
コンセプトは、
T
に対する三方比較演算子
<=>
が、
Cat
によって示される比較カテゴリと一致する結果を生成することを指定します。
std::three_way_comparable_with
は、三方比較演算子
<=>
が(混在する可能性のある)
T
および
U
オペランドに対して、
Cat
によって暗示される比較カテゴリと一致する結果を生成することを指定します。混合オペランドの比較は、オペランドを共通の型に変換して比較した場合と等価な結果を生成します。
__WeaklyEqualityComparableWith
、
__PartiallyOrderedWith
、および
__ComparisonCommonTypeWith
は説明専用のコンセプトです。詳細は
equality_comparable
および
totally_ordered
の説明を参照してください。
目次 |
セマンティック要件
これらの概念は、それらが満たされ、かつそれらが包含するすべての概念がモデル化されている場合にのみモデル化されます。
T
と
Cat
が
std
::
three_way_comparable
<
T, Cat
>
をモデル化するのは、型
const
std::
remove_reference_t
<
T
>
の左辺値
a
と
b
が与えられたとき、以下が真である場合に限ります:
- ( a <=> b == 0 ) == bool ( a == b ) 、
- ( a <=> b ! = 0 ) == bool ( a ! = b ) 、
- ( ( a <=> b ) <=> 0 ) と ( 0 <=> ( b <=> a ) ) が等しいこと、
- bool ( a > b ) == bool ( b < a ) 、
- bool ( a >= b ) == ! bool ( a < b ) 、
- bool ( a <= b ) == ! bool ( b < a ) 、
- ( a <=> b < 0 ) == bool ( a < b ) 、
- ( a <=> b > 0 ) == bool ( a > b ) 、
- ( a <=> b <= 0 ) == bool ( a <= b ) 、および
- ( a <=> b >= 0 ) == bool ( a >= b ) 、および
-
Catが std::strong_ordering に変換可能な場合、Tはtotally_orderedをモデル化します。
T
,
U
, and
Cat
model
std
::
three_way_comparable_with
<
T, U, Cat
>
only if given
-
tとt2、それぞれ型 const std:: remove_reference_t < T > および std:: remove_reference_t < T > の互いに等しい別個のオブジェクトを表す左辺値、および -
uとu2、それぞれ型 const std:: remove_reference_t < U > および std:: remove_reference_t < U > の互いに等しい別個のオブジェクトを表す左辺値。
C
を
std::
common_reference_t
<
const
std::
remove_reference_t
<
T
>
&
,
const
std::
remove_reference_t
<
U
>
&
>
とし、式
E
と型
C
が与えられたとき、
CONVERT_TO
<
C
>
(
E
)
を次のように定義する:
|
(C++23まで) |
|
(C++23から) |
以下が真です:
- t <=> u と u <=> t は同じドメインを持つ、
- ( ( t <=> u ) <=> 0 ) と ( 0 <=> ( u <=> t ) ) は等しい、
- ( t <=> u == 0 ) == bool ( t == u ) 、
- ( t <=> u ! = 0 ) == bool ( t ! = u ) 、
- Cat ( t <=> u ) == Cat ( CONVERT_TO < C > ( t2 ) <=> CONVERT_TO < C > ( u2 ) ) 、
- ( t <=> u < 0 ) == bool ( t < u ) 、
- ( t <=> u > 0 ) == bool ( t > u ) 、
- ( t <=> u <= 0 ) == bool ( t <= u ) 、
- ( t <=> u >= 0 ) == bool ( t >= u ) 、および
-
Catが std::strong_ordering に変換可能な場合、TとUは std:: totally_ordered_with < T, U > をモデル化する。
等価性保存
標準ライブラリコンセプトの requires expressions で宣言される式は、 equality-preserving であることが要求されます(特に明記されている場合を除く)。
暗黙的な式のバリエーション
A requires expression は、ある定数左辺値オペランドに対して非変更的な式を使用する場合、 暗黙的な式のバリエーション も要求します。
関連項目
|
operator
==
が同値関係であることを指定する
(concept) |
|
|
型に対する比較演算子が全順序を生成することを指定する
(concept) |