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 T0...Tn-1
       is defined as
	  follows:

	    * If any Ti	is not a comparison category type (std::partial_order-
       ing,
	      std::weak_ordering, std::strong_ordering), U is void.
	    * Otherwise, if at least one Ti is std::partial_ordering, U	is
	      std::partial_ordering
	    * Otherwise, if at	least  one  Ti	is  std::weak_ordering,	 U  is
       std::weak_ordering
	    *  Otherwise  (if every Ti 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	    =	      typename
       (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_ordering;
       };
	  template<>
	  struct  common_cmpcat_base<2u> { using type =	std::partial_ordering;
       };
	  template<>
	  struct common_cmpcat_base<4u>	{ using	type = std::weak_ordering; };
	  template<>
	  struct common_cmpcat_base<6u>	{ using	type =	std::partial_ordering;
       };

	  } // 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)

http://cppreference.com		  2022.07.31	 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.0>

home | help