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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::strong_ordering - std::strong_ordering

Synopsis
	  Defined in header <compare>
	  class	strong_ordering;       (since C++20)

	  The  class  type std::strong_ordering	is the result type of a	three-
       way comparison
	  that

	    * admits all six relational	operators (==, !=, <, <=, >, >=)

	    * implies substitutability:	if a is	equivalent to b, f(a) is  also
       equivalent to
	      f(b),  where  f  denotes	a function that	reads only comparison-
       salient state that
	      is accessible via	the argument's public const members. In	 other
       words,
	      equivalent values	are indistinguishable.
	    *  does  not allow incomparable values: exactly one	of a < b, a ==
       b, or a > b must
	      be true

Constants
	  The type std::strong_ordering	has four valid values, implemented  as
       const static
	  data members of its type:

	  Member constant	       Definition
	  less(inline	constexpr)	   a   valid   value   of   the	  type
       std::strong_ordering
	  [static]		       indicating less-than  (ordered  before)
       relationship
				       (public static member constant)
				       a    valid    value    of    the	  type
       std::strong_ordering
	  equivalent(inline constexpr) indicating equivalence (neither ordered
       before nor
	  [static]		       ordered after), the same	as equal
				       (public static member constant)
				       a   valid    value    of	   the	  type
       std::strong_ordering
	  equal(inline constexpr)      indicating equivalence (neither ordered
       before nor
	  [static]		       ordered after), the same	as equivalent
				       (public static member constant)
	  greater(inline   constexpr)	   a   valid   value   of   the	  type
       std::strong_ordering
	  [static]		       indicating greater-than (ordered	after)
       relationship
				       (public static member constant)

Conversions
	  std::strong_ordering is the strongest	of the three comparison	 cate-
       gories: it is not
	  implicitly-convertible  from	any  other category and	is implicitly-
       convertible to the
	  other	two.

	  operator partial_ordering implicit conversion	to std::partial_order-
       ing
				    (public member function)

       std::strong_ordering::operator partial_ordering

	  constexpr operator partial_ordering()	const noexcept;

Return value
	  std::partial_ordering::less  if  v  is   less,   std::partial_order-
       ing::greater if v is
	  greater,  std::partial_ordering::equivalent if v is equal or equiva-
       lent.

	  operator weak_ordering implicit conversion to	std::weak_ordering
				 (public member	function)

       std::strong_ordering::operator weak_ordering

	  constexpr operator weak_ordering() const noexcept;

Return value
	  std::weak_ordering::less if v	is  less,  std::weak_ordering::greater
       if v is greater,
	  std::weak_ordering::equivalent if v is equal or equivalent.

Comparisons
	  Comparison  operators	 are  defined  between values of this type and
       literal 0.
	  This supports	the expressions	a <=> b	== 0 or	a <=> b	< 0  that  can
       be used to
	  convert  the	result of a three-way comparison operator to a boolean
       relationship; see
	  std::is_eq, std::is_lt, etc.

	  These	functions are not visible to ordinary unqualified or qualified
       lookup, and can
	  only be found	by argument-dependent lookup when std::strong_ordering
       is an
	  associated class of the arguments.

	  The behavior of a program that attempts to compare a strong_ordering
       with anything
	  other	than the integer literal 0 is undefined.

	  operator==
	  operator<
	  operator>   compares with zero or a strong_ordering
	  operator<=  (function)
	  operator>=
	  operator<=>

       operator==

	  friend constexpr bool	operator==(strong_ordering v,  /*unspecified*/
       u)	   (1)
	  noexcept;
	  friend  constexpr bool operator==(strong_ordering v, strong_ordering
       w) noexcept (2)
	  = default;

Parameters
	  v, w - std::strong_ordering values to	check
	  u    - an unused parameter of	any type that accepts literal zero ar-
       gument

Return value
	  1) true if v is equivalent or	equal, false if	v is less or greater
	  2) true if both parameters hold the  same  value,  false  otherwise.
       Note that equal is
	  the same as equivalent.

       operator<

	  friend  constexpr  bool operator<(strong_ordering v, /*unspecified*/
       u) noexcept; (1)
	  friend constexpr bool	operator<(/*unspecified*/  u,  strong_ordering
       v) noexcept; (2)

Parameters
	  v - a	std::strong_ordering value to check
	  u  - an unused parameter of any type that accepts literal zero argu-
       ment

Return value
	  1) true if v is less,	and false if  v	 is  greater,  equivalent,  or
       equal
	  2)  true  if	v  is  greater,	and false if v is less,	equivalent, or
       equal

       operator<=

	  friend constexpr bool	operator<=(strong_ordering v,  /*unspecified*/
       u)	   (1)
	  noexcept;
	  friend  constexpr bool operator<=(/*unspecified*/ u, strong_ordering
       v)	   (2)
	  noexcept;

Parameters
	  v - a	std::strong_ordering value to check
	  u - an unused	parameter of any type that accepts literal zero	 argu-
       ment

Return value
	  1)  true  if	v  is  less,  equivalent,  or equal, and false if v is
       greater
	  2) true if v is greater, equivalent, or equal, and  false  if	 v  is
       less

       operator>

	  friend  constexpr  bool operator>(strong_ordering v, /*unspecified*/
       u) noexcept; (1)
	  friend constexpr bool	operator>(/*unspecified*/  u,  strong_ordering
       v) noexcept; (2)

Parameters
	  v - a	std::strong_ordering value to check
	  u  - an unused parameter of any type that accepts literal zero argu-
       ment

Return value
	  1) true if v is greater, and false if	 v  is	less,  equivalent,  or
       equal
	  2)  true  if	v  is  less, and false if v is greater,	equivalent, or
       equal

       operator>=

	  friend constexpr bool	operator>=(strong_ordering v,  /*unspecified*/
       u)	   (1)
	  noexcept;
	  friend  constexpr bool operator>=(/*unspecified*/ u, strong_ordering
       v)	   (2)
	  noexcept;

Parameters
	  v - a	std::strong_ordering value to check
	  u - an unused	parameter of any type that accepts literal zero	 argu-
       ment

Return value
	  1)  true  if	v  is greater, equivalent, or equal, and false if v is
       less
	  2) true if v is less,	equivalent,  or	 equal,	 and  false  if	 v  is
       greater

       operator<=>

	  friend   constexpr  strong_ordering  operator<=>(strong_ordering  v,
       /*unspecified*/ (1)
	  u) noexcept;
	  friend  constexpr  strong_ordering  operator<=>(/*unspecified*/   u,
       strong_ordering (2)
	  v) noexcept;

Parameters
	  v - a	std::strong_ordering value to check
	  u  - an unused parameter of any type that accepts literal zero argu-
       ment

Return value
	  1) v.
	  2) greater if	v is less, less	if v is	greater, otherwise v.

Example
	   This	section	is incomplete
	   Reason: no example

See also
	  weak_ordering	   the result type of 3-way comparison	that  supports
       all 6 operators
	  (C++20)	   and is not substitutable
			   (class)
	  partial_ordering  the	 result	type of	3-way comparison that supports
       all 6 operators,
	  (C++20)	   is not substitutable, and allows incomparable  val-
       ues
			   (class)

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

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

home | help