ranges_less

ranges_less (범위 less 함수 객체)

std::ranges::less는 두 값을 비교하여 첫 번째 값이 두 번째 값보다 작은지 확인하는 함수 객체예요. C++20부터 <functional> 헤더에서 제공되며, 인자에서 함수 호출 연산자의 매개변수 타입을 추론해요. 반환 타입은 추론하지 않아요.

출처: cppreference

본문

std::ranges::less는 비교를 수행하는 함수 객체예요. 함수 호출 연산자의 매개변수 타입을 인자로부터 추론하지만, 반환 타입은 추론하지 않아요.

중첩 타입 (Nested types)

중첩 타입 정의
is_transparent 불명 (unspecified)

멤버 함수 (Member functions)

멤버 함수 설명
operator() 첫 번째 인자가 두 번째 인자보다 작은지 확인해요 (공개 멤버 함수)

std::ranges::less::operator()

template < class T , class U > constexpr bool operator ()( T && t , U && u ) const ;

std::forward<T>(t) < std::forward<U>(u)라는 표현식을 expr이라고 할 때:

  • expr이 포인터를 비교하는 내장 operator< 호출로 이어지는 경우, tu의 합성 포인터 타입(composite pointer type)을 P라고 해요.
    • 변환된 t가 변환된 u (둘 다 타입 P)보다 구현 정의된 포인터의 엄격한 전체 순서(strict total order)에서 앞서면 true를 반환하고, 그렇지 않으면 false를 반환해요. T에서 P로의 변환 시퀀스 또는 U에서 P로의 변환 시퀀스가 동등 보존(equality-preserving)이 아니면 동작이 정의되지 않아요.
  • 그 외의 경우:
    • expr의 결과를 반환해요. std::totally_ordered_with<T, U>가 모델링되지 않으면 동작이 정의되지 않아요.

이 오버로드는 std::totally_ordered_with<T, U>가 만족될 때만 오버로드 해석에 참여해요.

타입 T의 표현식 expr1과 타입 U의 표현식 expr2가 존재하여, expr1expr2의 비교 결과가 엄격한 전체 순서를 위반하면 동작이 정의되지 않아요. 아래 표현식 중 정확히 하나만 true일 때 expr1expr2의 비교 결과는 엄격한 전체 순서를 따라요:

  • std::ranges::less{}(expr1, expr2)
  • std::ranges::less{}(expr2, expr1)
  • std::ranges::equal_to{}(expr1, expr2)

참고 (Notes)

std::less와 달리 std::ranges::less는 여섯 개의 비교 연산자 <, <=, >, >=, ==, !=가 모두 유효해야 해요 (totally_ordered_with 제약을 통해).

예제 (Example)

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

결함 보고서 (Defect reports)

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

DR 적용 대상 발표된 동작 올바른 동작
LWG 3530 C++20 포인터 비교 시 구문 검사가 완화되었어요 의미론적 요구사항만 완화되었어요

같이 보기 (See also)

less x < y를 구현하는 함수 객체 (클래스 템플릿) [edit]

더 알아보기 (Learn more)

cppreference