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
개념은 어떤 타입에 대해 비교 연산자
==,!=,<,>,<=,>=
가 해당 타입의
엄격한 전체 순서
와 일관된 결과를 생성함을 명시합니다.
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 > 타입의 서로 다른 동등한 객체를 나타내는 lvalue들, 그리고 -
u와u2, 각각 const std:: remove_reference_t < U > 및 std:: remove_reference_t < U > 타입의 서로 다른 동등한 객체를 나타내는 lvalue들,
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
>
의 임의의 lvalue
t, 및 -
타입
const
std::
remove_reference_t
<
U
>
의 임의의 lvalue
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 해야 합니다(다르게 명시된 경우를 제외하고).
암시적 표현 변형
상수 lvalue 피연산자에 대해 비수정적인 표현식을 사용하는 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 Concept
totally_ordered[concept.totallyordered]
-
18.5.4 Concept
참고 항목
|
주어진 타입들에 대해
<=>
연산자가 일관된 결과를 생성함을 명시
(concept) |