Namespaces
Variants

std:: totally_ordered, std:: totally_ordered_with

From cppreference.net
헤더에 정의됨 <concepts>
template < class T >

concept totally_ordered =

std:: equality_comparable < T > && __PartiallyOrderedWith < T, T > ;
(1) (C++20부터)
template < class T, class U >

concept totally_ordered_with =
std :: totally_ordered < T > &&
std :: totally_ordered < U > &&
std:: equality_comparable_with < T, U > &&
std :: totally_ordered <
std:: common_reference_t <
const std:: remove_reference_t < T > & ,
const std:: remove_reference_t < U > & >> &&

__PartiallyOrderedWith < T, U > ;
(2) (C++20부터)
헬퍼 개념
template < class T, class U >

concept __PartiallyOrderedWith =
requires ( const std:: remove_reference_t < T > & t,
const std:: remove_reference_t < U > & u ) {
{ t < u } - > boolean-testable ;
{ t > u } - > boolean-testable ;
{ t <= u } - > boolean-testable ;
{ t >= u } - > boolean-testable ;
{ u < t } - > boolean-testable ;
{ u > t } - > boolean-testable ;
{ u <= t } - > boolean-testable ;
{ u >= t } - > boolean-testable ;

} ;
(3) ( 설명 전용* )
1) std::totally_ordered 개념은 어떤 타입에 대해 비교 연산자 ==,!=,<,>,<=,>= 가 해당 타입의 엄격한 전체 순서 와 일관된 결과를 생성함을 명시합니다.
2) std::totally_ordered_with 개념은 (혼합된) T U 피연산자들에 대한 비교 연산자들 ==,!=,<,>,<=,>= 이 엄격한 전체 순서와 일치하는 결과를 생성하도록 지정합니다. 혼합된 피연산자들을 비교하는 것은 피연산자들을 공통 타입으로 변환하여 비교한 것과 동등한 결과를 생성합니다.
3) 전시 전용(exposition-only) 개념 __PartiallyOrderedWith T 타입의 값과 U 타입의 값을 < , > , <= , 그리고 >= 를 사용하여 서로 비교할 수 있으며(어느 순서로든), 비교 결과가 일관적임을 명시합니다.

목차

의미론적 요구사항

이러한 개념들은 그 개념들이 충족되고 그 개념들이 포함하는 모든 개념들이 모델링된 경우에만 모델링됩니다.

1) std :: totally_ordered < T > 는 다음 조건이 충족될 때만 모델링됩니다: 타입 const std:: remove_reference_t < T > 의 lvalue 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 )
2) std :: totally_ordered_with < T, U > is modeled only if, given

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 이전)
  • static_cast < const C & > ( std:: as_const ( E ) ) 해당 표현식이 유효한 경우,
  • static_cast < const C & > ( std :: move ( E ) ) 그렇지 않은 경우.
(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 ) )
**참고:** 제공된 HTML 코드 내의 모든 텍스트는 C++ 코드로 구성되어 있으며, 지시사항에 따라 ` `, `
`, `` 태그 내의 텍스트와 C++ 관련 용어는 번역하지 않았습니다. HTML 태그와 속성도 원본 그대로 유지했습니다.
3) __PartiallyOrderedWith < T, 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]
  • C++20 표준(ISO/IEC 14882:2020):
  • 18.5.4 Concept totally_ordered [concept.totallyordered]

참고 항목

주어진 타입들에 대해 <=> 연산자가 일관된 결과를 생성함을 명시
(concept)