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부터) |
부분 표현식 t와 u에 대해 삼자 비교를 수행하고, 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::unordered—t == u,t < u,u < t표현식이 모두 잘 구성되어 있고,decltype(t == u),decltype(t < u),decltype(u < t)각각이 boolean-testable 모델을 만족한다면. 단,t와u는 한 번만 평가돼요.
그 외의 모든 경우에 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] |
|---|