compare_compare_strong_order_fallback

compare_compare_strong_order_fallback (강한 순서 비교 폴백)

이 페이지는 C++20에서 도입된 std::compare_strong_order_fallback 사용자 지정 지점 객체에 대해 설명해요. 이 함수는 operator<=>를 사용할 수 없는 상황에서도 세 방향 비교를 수행하고 std::strong_ordering 타입의 결과를 만들어요. tu라는 하위 표현식에 대해 비교를 수행하며, 기본적으로 std::strong_order를 먼저 시도하고, 그것이 불가능하면 ==<를 이용한 폴백 메커니즘을 사용해요.

출처: cppreference

본문

헤더 및 호출 시그니처

<compare> 헤더에 정의되어 있으며, C++20부터 사용할 수 있어요.

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

동작 방식

std::compare_strong_order_fallback(t, u)는 하위 표현식 tu에 대해 세 방향 비교를 수행하고 std::strong_ordering 타입의 결과를 생성해요. operator<=>를 사용할 수 없는 경우에도 동작해요.

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

  • std::strong_order(t, u) — 이 표현식이 잘 구성된 경우.
  • 그렇지 않으면, t == u ? std::strong_ordering::equal : t < u ? std::strong_ordering::less : std::strong_ordering::greater
    • 단, t == ut < u가 모두 잘 구성된 표현식이고, decltype(t == u)decltype(t < u)가 모두 boolean-testable 모델을 만족해야 해요. 또한 tu는 한 번만 평가돼요.

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

사용자 지정 지점 객체

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

예제

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

결함 보고서

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

DR 적용 대상 발표된 동작 올바른 동작
LWG 2114 ( P2167R3 ) C++20 폴백 메커니즘은 반환 타입이 bool로 변환 가능하기만 하면 됐어요 제약 조건이 강화됨

같이 보기

strong_order (C++20) 세 방향 비교를 수행하고 std::strong_ordering 타입의 결과를 생성해요 (사용자 지정 지점 객체) [편집]

더 알아보기 (Learn more)

cppreference