compare_compare_strong_order_fallback
compare_compare_strong_order_fallback (강한 순서 비교 폴백)
이 페이지는 C++20에서 도입된 std::compare_strong_order_fallback 사용자 지정 지점 객체에 대해 설명해요. 이 함수는 operator<=>를 사용할 수 없는 상황에서도 세 방향 비교를 수행하고 std::strong_ordering 타입의 결과를 만들어요. t와 u라는 하위 표현식에 대해 비교를 수행하며, 기본적으로 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)는 하위 표현식 t와 u에 대해 세 방향 비교를 수행하고 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 == u와t < u가 모두 잘 구성된 표현식이고,decltype(t == u)와decltype(t < u)가 모두boolean-testable모델을 만족해야 해요. 또한t와u는 한 번만 평가돼요.
- 단,
그 외의 모든 경우에 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 타입의 결과를 생성해요 (사용자 지정 지점 객체) [편집] |
|---|