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) のいずれか一つだけが 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式で宣言された式は、(特に明記されていない限り)等価性保持である必要があります。
[編集] 暗黙の式バリエーション
一部の定数左辺値オペランドに対して非変更的である式を使用するrequires式は、暗黙の式バリエーションも必要とする。
[編集] 参照
- C++23標準 (ISO/IEC 14882:2024)
- 18.5.5 Concept
totally_ordered[concept.totallyordered]
- 18.5.5 Concept
- C++20 standard (ISO/IEC 14882:2020)
- 18.5.4 Concept
totally_ordered[concept.totallyordered]
- 18.5.4 Concept
[編集] 関連項目
| 演算子<=>が与えられた型に対して一貫した結果を生成することを規定する (コンセプト) |