Namespaces
Variants

std::experimental::ranges:: StrictTotallyOrdered, std::experimental::ranges:: StrictTotallyOrderedWith

From cppreference.net
헤더 파일에 정의됨 <experimental/ranges/concepts>
template < class T >

concept bool StrictTotallyOrdered =
EqualityComparable < T > &&
requires ( const std:: remove_reference_t < T > & a,
const std:: remove_reference_t < T > & b ) {
{ a < b } - > Boolean && ;
{ a > b } - > Boolean && ;
{ a <= b } - > Boolean && ;
{ a >= b } - > Boolean && ;

} ;
(1) (ranges TS)
template < class T, class U >

concept bool StrictTotallyOrderedWith =
StrictTotallyOrdered < T > &&
StrictTotallyOrdered < U > &&
CommonReference <
const std:: remove_reference_t < T > & ,
const std:: remove_reference_t < U > & > &&
StrictTotallyOrdered <
ranges:: common_reference_t <
const std:: remove_reference_t < T > & ,
const std:: remove_reference_t < U > & >> &&
EqualityComparableWith < T, U > &&
requires ( const std:: remove_reference_t < T > & t,
const std:: remove_reference_t < U > & u ) {
{ t < u } - > Boolean && ;
{ t > u } - > Boolean && ;
{ t <= u } - > Boolean && ;
{ t >= u } - > Boolean && ;
{ u < t } - > Boolean && ;
{ u > t } - > Boolean && ;
{ u <= t } - > Boolean && ;
{ u >= t } - > Boolean && ;

} ;
(2) (ranges TS)
1) 개념 StrictTotallyOrdered<T> T 에 대한 비교 연산자 ==,!=,<,>,<=,>= T 에 대한 엄격한 전순서 와 일치하는 결과를 생성함을 명시합니다.

StrictTotallyOrdered<T> 는 주어진 T 타입의 좌측값 a , b , c (타입 const std:: remove_reference_t < T > )에 대해 다음 조건이 충족될 때만 만족됩니다:

  • 다음 중 정확히 하나가 true 입니다: bool ( a < b ) , bool ( a > b ) , bool ( a == b ) ;
  • 만약 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) StrictTotallyOrderedWith<T, U> 개념은 (혼합된) T U 피연산자에 대한 비교 연산자 ==,!=,<,>,<=,>= 가 엄격한 전체 순서와 일치하는 결과를 생성함을 명시합니다. 혼합된 피연산자를 비교하는 것은 피연산자를 공통 타입으로 변환하여 비교한 것과 동등한 결과를 생성합니다.

형식적으로, StrictTotallyOrderedWith<T, U> 는 타입 const std:: remove_reference_t < T > 의 임의의 lvalue t 와 타입 const std:: remove_reference_t < U > 의 임의의 lvalue u 가 주어졌을 때, 그리고 C ranges:: common_reference_t < const std:: remove_reference_t < T > & , const std:: remove_reference_t < U > & > 라고 할 때 다음 조건들을 만족하는 경우에만 충족됩니다:

  • bool ( t < u ) == bool ( C ( t ) < C ( u ) )
  • bool ( t > u ) == bool ( C ( t ) > C ( u ) )
  • bool ( t <= u ) == bool ( C ( t ) <= C ( u ) )
  • bool ( t >= u ) == bool ( C ( t ) >= C ( u ) )
  • bool ( u < t ) == bool ( C ( u ) < C ( t ) )
  • bool ( u > t ) == bool ( C ( u ) > C ( t ) )
  • bool ( u <= t ) == bool ( C ( u ) <= C ( t ) )
  • bool ( u >= t ) == bool ( C ( u ) >= C ( t ) )

동등성 보존

표현식은 동일한 입력이 주어졌을 때 동일한 출력을 결과로 내는 경우 등식 보존(equality preserving) 합니다.

  • 표현식의 입력은 피연산자들로 구성됩니다.
  • 표현식의 출력은 결과값과 표현식에 의해 수정된 모든 피연산자(있는 경우)로 구성됩니다.

동등성 보존이 요구되는 모든 표현식은 추가로 안정적(stable) 이어야 합니다: 동일한 입력 객체에 대한 이러한 표현식의 두 평가는 해당 입력 객체에 대한 명시적인 중간 수정이 없는 경우 동일한 출력을 가져야 합니다.

달리 명시되지 않는 한, requires-expression 에서 사용되는 모든 표현식은 등식 보존적이고 안정적이어야 하며, 표현식의 평가는 비상수 피연산자만 수정할 수 있습니다. 상수인 피연산자는 수정되어서는 안 됩니다.

암시적 표현 변형

어떤 상수 lvalue 피연산자에 대해 수정하지 않는 표현식을 사용하는 requires-expression 은 해당 피연산자에 대해 비상수 lvalue 또는 (가능하다면 상수) rvalue를 허용하는 해당 표현식의 추가 변형을 명시적으로 다른 의미론으로 요구하지 않는 한 암묵적으로도 요구합니다. 이러한 암묵적 표현식 변형 은 선언된 표현식의 동일한 의미론적 요구사항을 충족해야 합니다. 구현이 이러한 변형들의 구문을 검증하는 범위는 명시되지 않습니다.