std:: totally_ordered, std:: totally_ordered_with
|
定義ヘッダー
<concepts>
|
||
|
template
<
class
T
>
concept totally_ordered
=
|
(1) | (C++20以降) |
|
template
<
class
T,
class
U
>
concept totally_ordered_with
=
|
(2) | (C++20以降) |
|
ヘルパーコンセプト
|
||
|
template
<
class
T,
class
U
>
concept __PartiallyOrderedWith
=
|
(3) | ( 説明専用* ) |
std::totally_ordered_with
は、比較演算子
==,!=,<,>,<=,>=
が(異なる型である可能性のある)
T
と
U
オペランドに対して、厳密な全順序と整合性のある結果を生成することを指定します。異なる型のオペランドを比較する場合、オペランドを共通の型に変換して比較した場合と等価な結果を生成します。
__PartiallyOrderedWith
は、型
T
の値と型
U
の値が相互に(どちらの順序でも)
<
、
>
、
<=
、および
>=
を使用して半順序で比較可能であり、比較結果が一貫していることを指定します。
目次 |
セマンティック要件
これらの概念は、それらが満たされ、かつそれらが包含するすべての概念がモデル化されている場合にのみモデル化されます。
a
、
b
、
c
が与えられたときに以下の条件が満たされる場合のみである:
- bool ( a < b ) 、 bool ( a > b ) および bool ( a == b ) のうち、ちょうど1つが true であること;
- bool ( a < b ) と bool ( b < c ) がともに true の場合、 bool ( a < c ) も true であること;
- bool ( a > b ) == bool ( b < a )
- bool ( a >= b ) == ! bool ( a < b )
- bool ( a <= b ) == ! bool ( b < a )
-
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以降) |
以下が真です:
- bool ( t < u ) == bool ( CONVERT_TO < C > ( t2 ) < CONVERT_TO < C > ( u2 ) )
- bool ( t > u ) == bool ( CONVERT_TO < C > ( t2 ) > CONVERT_TO < C > ( u2 ) )
- bool ( t <= u ) == bool ( CONVERT_TO < C > ( t2 ) <= CONVERT_TO < C > ( u2 ) )
- bool ( t >= u ) == bool ( CONVERT_TO < C > ( t2 ) >= CONVERT_TO < C > ( u2 ) )
- bool ( u < t ) == bool ( CONVERT_TO < C > ( u2 ) < CONVERT_TO < C > ( t2 ) )
- bool ( u > t ) == bool ( CONVERT_TO < C > ( u2 ) > CONVERT_TO < C > ( t2 ) )
- bool ( u <= t ) == bool ( CONVERT_TO < C > ( u2 ) <= CONVERT_TO < C > ( t2 ) )
- bool ( u >= t ) == bool ( CONVERT_TO < C > ( u2 ) >= CONVERT_TO < C > ( t2 ) )
`/`
`/`
-
型
const
std::
remove_reference_t
<
T
>
の任意の左辺値
t、および -
型
const
std::
remove_reference_t
<
U
>
の任意の左辺値
uについて、
以下が真であるとき:
- t < u 、 t <= u 、 t > u 、 t >= u 、 u < t 、 u <= t 、 u > t 、および u >= t が同じ定義域を持つこと;
- bool ( t < u ) == bool ( u > t ) ;
- bool ( u < t ) == bool ( t > u ) ;
- bool ( t <= u ) == bool ( u >= t ) ; および
- bool ( u <= t ) == bool ( t >= u ) .
等価性保存
標準ライブラリコンセプトの requires expressions で宣言される式は、 equality-preserving であることが要求されます(特に明記されている場合を除く)。
暗黙的な式のバリエーション
定数左辺値オペランドに対して非変更式を使用する requires expression は、 暗黙的な式バリエーション も要求します。
参考文献
- C++23標準 (ISO/IEC 14882:2024):
-
-
18.5.5 コンセプト
totally_ordered[concept.totallyordered]
-
18.5.5 コンセプト
- C++20標準 (ISO/IEC 14882:2020):
-
-
18.5.4 コンセプト
totally_ordered[concept.totallyordered]
-
18.5.4 コンセプト
関連項目
|
指定された型に対して
<=>
演算子が一貫した結果を生成することを指定する
(コンセプト) |