compare_compare_partial_order_fallback

compare_compare_partial_order_fallback (부분 순서 비교 폴백)

이 페이지는 C++20에서 도입된 std::compare_partial_order_fallback 사용자 지정 지점 객체에 대해 설명해요. 이 객체는 operator<=>를 사용할 수 없는 상황에서도 부분 순서 비교(partial ordering)를 수행할 수 있게 해주는 폴백 메커니즘을 제공해요. std::partial_order와 비슷하지만, <=>가 없어도 ==<를 이용해 비교 결과를 만들어내요.

출처: cppreference

본문

항목 내용
헤더 <compare>에 정의됨
inline namespace /* unspecified */ { inline constexpr /* unspecified */ compare_partial_order_fallback = /* unspecified */ ; } (C++20부터)
호출 시그니처
template < class T , class U > requires /* see below */ constexpr std :: partial_ordering compare_partial_order_fallback ( T && t , U && u ) noexcept ( /* see below */ ); (C++20부터)

부분 표현식 tu에 대해 삼자 비교를 수행하고, operator<=>를 사용할 수 없더라도 std::partial_ordering 타입의 결과를 생성해요.

만약 std::decay_t<T>std::decay_t<U>가 같은 타입이라면, std::compare_partial_order_fallback(t, u)는 다음 표현식과 동등해요(expression-equivalent):

  • std::partial_order(t, u) — 잘 구성된 표현식(well-formed expression)이라면;
  • 그렇지 않으면, t == u ? std::partial_ordering::equivalent : t < u ? std::partial_ordering::less : u < t ? std::partial_ordering::greater : std::partial_ordering::unorderedt == u, t < u, u < t 표현식이 모두 잘 구성되어 있고, decltype(t == u), decltype(t < u), decltype(u < t) 각각이 boolean-testable 모델을 만족한다면. 단, tu는 한 번만 평가돼요.

그 외의 모든 경우에 std::compare_partial_order_fallback(t, u)는 잘못된 형식(ill-formed)이에요. 이는 템플릿 인스턴스화의 즉시 문맥(immediate context)에 나타날 때 치환 실패(substitution failure)로 이어질 수 있어요.

사용자 지정 지점 객체 (Customization point objects)

std::compare_partial_order_fallback이라는 이름은 사용자 지정 지점 객체(customization point object)를 나타내요. 이는 리터럴 세미레귤러 클래스 타입(literal semiregular class type)의 const 함수 객체예요. 자세한 내용은 CustomizationPointObject를 참고하세요.

예제 (Example)

이 섹션은 불완전해요. 이유: 예제 없음

결함 보고 (Defect reports)

다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었어요.

DR 적용 대상 게시된 동작 올바른 동작
LWG 2114 ( P2167R3 ) C++20 폴백 메커니즘이 반환 타입이 bool로 변환 가능하기만을 요구했음 제약 조건 강화됨
LWG 3465 C++20 폴백 메커니즘이 u < t가 잘 구성될 것을 요구하지 않았음 요구됨
LWG 4157 C++20 P2167R3이 LWG issue 3465의 해결을 덮어씀 해결이 복원됨

같이 보기 (See also)

partial_order (C++20) 3방향 비교를 수행하고 std::partial_ordering 타입의 결과를 생성해요 (사용자 지정 지점 객체) [edit]

더 알아보기 (Learn more)

cppreference