Namespaces
Variants

std::experimental::ranges:: EqualityComparable, std::experimental::ranges:: EqualityComparableWith

From cppreference.net
template < class T >
concept bool EqualityComparable = WeaklyEqualityComparableWith < T, T > ;
(1) (ranges TS)
template < class T, class U >

concept bool EqualityComparableWith =
EqualityComparable < T > &&
EqualityComparable < U > &&
CommonReference <
const std:: remove_reference_t < T > & ,
const std:: remove_reference_t < U > & > &&
EqualityComparable <
ranges:: common_reference_t <
const std:: remove_reference_t < T > & ,
const std:: remove_reference_t < U > & >> &&

WeaklyEqualityComparableWith < T, U > ;
(2) (ranges TS)
1) 개념 EqualityComparable<T> T 에 대한 비교 연산자 == != 가 동등성을 반영함을 지정합니다: == 는 피연산자가 동일한 경우에만 true 를 반환합니다.
EqualityComparable<T> 는 타입 T 의 객체 a b 가 주어졌을 때, bool ( a == b ) true 인 경우에만 a b 가 동일할 때 만족됩니다. a == b 가 동등성 보존적이라는 요구사항과 함께, 이는 == 가 대칭적이고 추이적임을 의미하며, 더 나아가 적어도 하나의 다른 객체와 동일한 모든 객체 a 에 대해 == 가 반사적임을 의미합니다.
2) EqualityComparableWith<T, U> 개념은 (혼합된) T U 피연산자에 대한 비교 연산자 == != 가 동등성과 일관된 결과를 생성함을 명시합니다. 혼합된 피연산자를 비교하는 것은 피연산자를 공통 타입으로 변환하여 비교한 것과 동등한 결과를 생성합니다.
공식적으로, EqualityComparableWith<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 ) ) 가 성립해야 합니다.

동등성 보존

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

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

동등성 보존이 요구되는 모든 표현식은 추가로 안정적(stable) 이어야 합니다: 동일한 입력 객체로 이러한 표현식을 두 번 평가할 때, 해당 입력 객체에 명시적인 수정이 개입되지 않는 한 동일한 출력을 가져야 합니다.

암시적 표현 변형

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