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

FreeBSD Manual Pages

  
 
  

home | help
std::common...son_category(3) C++ Standard Libarystd::common...son_category(3)

NAME
       std::common_comparison_category - std::common_comparison_category

Synopsis
	  Defined in header <compare>
	  template< class... Ts	>

	  struct common_comparison_category
	  {				      (since C++20)
	      using type = /* see below	*/ ;

	  };

	  The class template std::common_comparison_category provides an alias
       (as the member
	  typedef  type) for the strongest comparison category to which	all of
       the template
	  arguments Ts... can be converted.

	  In detail,  the  common  comparison  type  of	 a  list  of  n	 types
       T[0]...T[n-1] is	defined
	  as follows:

	    *  If any T[i] is not a comparison category	type (std::partial_or-
       dering,
	      std::weak_ordering, std::strong_ordering), U is void.
	    * Otherwise, if at least one T[i] is std::partial_ordering,	U is
	      std::partial_ordering.
	    * Otherwise, if at least one  T[i]	is  std::weak_ordering,	 U  is
       std::weak_ordering.
	    * Otherwise	(if every T[i] is std::strong_ordering,	or if the list
       is empty), U is
	      std::strong_ordering.

Template parameters
	  ...Ts	- a possibly empty list	of types

	  Helper template

	  template< class... Ts	>
	  using			common_comparison_category_t		     =
       (since C++20)
	  common_comparison_category<Ts...>::type;

Member types
	  Member type Definition
	  type	      the strongest common  comparison	category  (as  defined
       above)

Possible implementation
	  namespace detail
	  {
	      template<unsigned	int>
	      struct common_cmpcat_base	    { using type = void; };
	      template<>
	      struct  common_cmpcat_base<0u> { using type = std::strong_order-
       ing; };
	      template<>
	      struct common_cmpcat_base<2u> { using type = std::partial_order-
       ing; };
	      template<>
	      struct common_cmpcat_base<4u> { using type = std::weak_ordering;
       };
	      template<>
	      struct common_cmpcat_base<6u> { using type = std::partial_order-
       ing; };
	  } // namespace detail

	  template<class...Ts>
	  struct common_comparison_category :
	      detail::common_cmpcat_base<(0u | ... |
		  (std::is_same_v<Ts, std::strong_ordering>  ? 0u :
		   std::is_same_v<Ts, std::weak_ordering>    ? 4u :
		   std::is_same_v<Ts, std::partial_ordering> ? 2u : 1u)
	      )> {};

Example
	   This	section	is incomplete
	   Reason: no example

See also
	  strong_ordering  the result type of 3-way comparison	that  supports
       all 6 operators
	  (C++20)	   and is substitutable
			   (class)
	  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)

Category:
	    * Todo no example

http://cppreference.com		  2024.06.10	 std::common...son_category(3)

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

home | help