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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::weak_order - std::weak_order

Synopsis
	  Defined in header <compare>
	  inline namespace /* unspecified */ {

	  inline  constexpr  /*	unspecified */ weak_order = /* unspecified */;
       (since C++20)

	  }
	  Call signature
	  template< class T, class U >

	  requires /* see below	*/

	  constexpr std::weak_ordering weak_order(T&& t,  U&&  u)  noexcept(/*
       see
	  below	*/);

	  Compares  two	values using 3-way comparison and produces a result of
       type
	  std::weak_ordering

	  Let t	and u be expressions and T and U denote	decltype((t)) and  de-
       cltype((u))
	  respectively,	std::weak_order(t, u) is expression-equivalent to:

	    * If std::is_same_v<std::decay_t<T>, std::decay_t<U>> is true:

		 *  std::weak_ordering(weak_order(t,  u)),  if	it  is a well-
       formed expression
		   with	overload resolution performed in a context  that  does
       not include a
		   declaration of std::weak_order,
		 * otherwise, if T is a	floating-point type:

		      *	if std::numeric_limits<T>::is_iec559 is	true, performs
       the weak
			ordering  comparison of	floating-point values (see be-
       low) and	returns
			that result as a value of type std::weak_ordering,
		      *	otherwise, yields a value of  type  std::weak_ordering
       that is
			consistent  with the ordering observed by T's compari-
       son operators,

		 *  otherwise,	std::weak_ordering(std::compare_three_way()(t,
       u)), if it is
		   well-formed,
		 *  otherwise, std::weak_ordering(std::strong_order(t, u)), if
       it is
		   well-formed.

	    * In all other cases, the expression is ill-formed,	which can  re-
       sult in
	      substitution failure when	it appears in the immediate context of
       a template
	      instantiation.

	 Expression-equivalent

	  Expression e is expression-equivalent	to expression f, if

	    * e	and f have the same effects, and
	    *  either  both  are  constant subexpressions or else neither is a
       constant
	      subexpression, and
	    * either both are potentially-throwing or else neither  is	poten-
       tially-throwing
	      (i.e. noexcept(e)	== noexcept(f)).

	 Customization point objects

	  The name std::weak_order denotes a customization point object, which
       is a const
	  function  object of a	literal	semiregular class type.	For exposition
       purposes, the
	  cv-unqualified version of its	type is	denoted	as __weak_order_fn.

	  All instances	of __weak_order_fn are equal. The effects of  invoking
       different
	  instances  of	type __weak_order_fn on	the same arguments are equiva-
       lent, regardless
	  of whether the expression denoting the  instance  is	an  lvalue  or
       rvalue, and is
	  const-qualified  or  not  (however, a	volatile-qualified instance is
       not required to be
	  invocable). Thus, std::weak_order  can  be  copied  freely  and  its
       copies can be used
	  interchangeably.

	  Given	 a  set	 of types Args..., if std::declval<Args>()... meet the
       requirements for
	  arguments to std::weak_order above, __weak_order_fn models

	    * std::invocable<__weak_order_fn, Args...>,
	    * std::invocable<const __weak_order_fn, Args...>,
	    * std::invocable<__weak_order_fn&, Args...>, and
	    * std::invocable<const __weak_order_fn&, Args...>.

	  Otherwise, no	function call operator of __weak_order_fn participates
       in overload
	  resolution.

Notes
	   Strict weak order of	IEEE floating-point types

	  Let x	and y be values	of same	IEEE floating-point type, and weak_or-
       der_less(x, y) be
	  the boolean result indicating	if x precedes y	in the strict weak or-
       der defined by
	  the C++ standard.

	    * If neither x nor y is NaN, then weak_order_less(x, y) == true if
       and only	if x <
	      y, i.e. all representations of equal  floating-point  value  are
       equivalent;
	    *  If  x  is negative NaN and y is not negative NaN, then weak_or-
       der_less(x, y) ==
	      true;
	    * If x is not positive NaN and y is	positive  NaN,	then  weak_or-
       der_less(x, y) ==
	      true;
	    *  If  both	 x  and	 y are NaNs with the same sign,	then (weak_or-
       der_less(x, y) ||
	      weak_order_less(y, x)) ==	false, i.e. all	 NaNs  with  the  same
       sign are
	      equivalent.

Example
	   This	section	is incomplete
	   Reason: no example

See also
	  weak_ordering		      the result type of 3-way comparison that
       supports	all 6
	  (C++20)		      operators	and is not substitutable
				      (class)
	  strong_order		      performs 3-way comparison	and produces a
       result of type
	  (C++20)		      std::strong_ordering
				      (customization point object)
	  partial_order		      performs 3-way comparison	and produces a
       result of type
	  (C++20)		      std::partial_ordering
				      (customization point object)
	  compare_weak_order_fallback performs 3-way comparison	and produces a
       result of type
	  (C++20)		       std::weak_ordering, even	if operator<=>
       is unavailable
				      (customization point object)

http://cppreference.com		  2022.07.31		    std::weak_order(3)

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

home | help