Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::ranges::less(3)	      C++ Standard Libary	  std::ranges::less(3)

NAME
       std::ranges::less - std::ranges::less

Synopsis
	  Defined in header <functional>
	  struct less;			  (since C++20)

	  Function  object  for	 performing comparisons. Deduces the parameter
       types of	the
	  function call	operator from the arguments (but not the return	type).

	 Implementation-defined	strict total order over	pointers

	  The function call operator yields the	implementation-defined	strict
       total order over
	  pointers if the < operator between arguments invokes a built-in com-
       parison operator
	  for a	pointer, even if the built-in <	operator does not.

	  The implementation-defined strict total order	is consistent with the
       partial order
	  imposed  by  built-in	 comparison operators (<=>, <, >, <=, and >=),
       and consistent
	  among	following standard function objects:

	    *	  std::less,	  std::greater,	     std::less_equal,	   and
       std::greater_equal, when	the
	      template argument	is a pointer type or void

	    *	      std::ranges::equal_to,	    std::ranges::not_equal_to,
       std::ranges::less,
	      std::ranges::greater,		      std::ranges::less_equal,
       std::ranges::greater_equal, and
	      std::compare_three_way

Member types
	  Member type	 Definition
	  is_transparent /* unspecified	*/

Member functions
	  operator() checks if the first argument is less than the second
		     (public member function)

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

	  template< class T, class U >

	  requires  std::totally_ordered_with<T, U> // with different semantic
       requirements

	  constexpr bool operator()(T&&	t, U&& u) const;

	  Compares  t  and  u,	equivalent  to	return	std::forward<T>(t)   <
       std::forward<U>(u);,
	  except  when that expression resolves	to a call to a built-in	opera-
       tor< comparing
	  pointers.

	  When a call would not	invoke a built-in operator comparing pointers,
       the behavior is
	  undefined if std::totally_ordered_with<T, U> is not modeled.

	  When a call would invoke a built-in operator comparing  pointers  of
       type P, the
	  result is instead determined as follows:

	    *  Returns true if the (possibly converted)	value of the first ar-
       gument precedes
	      the (possibly converted) value of	the second argument in the
	      implementation-defined strict total ordering  over  all  pointer
       values of type P.
	      This  strict total ordering is consistent	with the partial order
       imposed by the
	      built-in operators <, >, <=, and >=.
	    * Otherwise, returns false.

	  The behavior is undefined unless the conversion sequences from  both
       T and U to P are
	  equality-preserving (see below).

	 Equality preservation

	  An  expression is equality preserving	if it results in equal outputs
       given equal
	  inputs.

	    * The inputs to an expression consist of its operands.
	    * The outputs of an	expression  consist  of	 its  result  and  all
       operands	modified by
	      the expression (if any).

	  In  specification  of	standard concepts, operands are	defined	as the
       largest
	  subexpressions that include only:

	    * an id-expression,	and
	    * invocations of std::move,	std::forward, and std::declval.

	  The cv-qualification and value category of each  operand  is	deter-
       mined by	assuming
	  that	each template type parameter denotes a cv-unqualified complete
       non-array object
	  type.

	  Every	expression required to be equality preserving is  further  re-
       quired to be
	  stable:  two	evaluations  of	such an	expression with	the same input
       objects must have
	  equal	outputs	absent any explicit intervening	modification of	 those
       input objects.

Notes
	  Unlike  std::less, std::ranges::less requires	all six	comparison op-
       erators <, <=, >,
	  >=, == and !=	to be valid (via the totally_ordered_with constraint).

Example
	   This	section	is incomplete
	   Reason: no example

	 Defect	reports

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

	     DR	   Applied to	      Behavior as published		  Cor-
       rect behavior
	  LWG  3530  C++20	syntactic checks were relaxed while   only se-
       mantic requirements
			      comparing	pointers		    relaxed

See also
	  less function	object implementing x <	y
	       (class template)

http://cppreference.com		  2022.07.31		  std::ranges::less(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::ranges::less&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help