std::less - cppreference.com

From cppreference.com

Defined in header

<functional>

template<classT>structless;(until C++14)template<classT=void>structless;(since C++14)Function object for performing comparisons. The main template invokes operator< on type T.

Specializations

(C++14)

function object implementing x<y deducing parameter and return types
(class template specialization)

[edit]

Member types

Type Definition result_type(deprecated in C++17)(removed in C++20)boolfirst_argument_type(deprecated in C++17)(removed in C++20)Tsecond_argument_type(deprecated in C++17)(removed in C++20)TThese member types are obtained via publicly inheriting std::binary_function<T,T,bool>.

(until C++11)Member functions

operator()

checks whether the first argument is less than the second
(public member function)std::less::operator()

booloperator()(constT&lhs,constT&rhs)const;(constexpr since C++14)Checks whether lhs is less than rhs.

Parameters

lhs, rhs - values to compare Return value

lhs<rhs.

If T is a pointer type, the result is consistent with the

implementation-defined strict total order over pointers

.

Exceptions

May throw implementation-defined exceptions.

Possible implementation

constexprbooloperator()(constT&lhs,constT&rhs)const{returnlhs<rhs;// assumes that the implementation handles pointer total order}Example

Run this code

#include<functional>template<typenameA,typenameB,typenameC=std::less<>>constexprboolfun(Aa,Bb,Ccmp=C{}){returncmp(a,b);}static_assert(fun(1,2)==true);static_assert(fun(1.0,1)==false);static_assert(fun(1,2.0)==true);static_assert(std::less<int>{}(5,5.6)==false);// 5 < 5 (warn: implicit conversion)static_assert(std::less<double>{}(5,5.6)==true);// 5.0 < 5.6static_assert(std::less<int>{}(5.6,5.7)==false);// 5 < 5 (warn: implicit conversion)static_assert(std::less{}(5,5.6)==true);// less<void>: 5.0 < 5.6intmain(){}Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior

LWG 2562

C++98 the pointer total order might be inconsistent guaranteed to be consistent See also