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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::common_with	- std::common_with

Synopsis
	  Defined in header <concepts>
	  template <class T, class U>

	  concept common_with =
	  std::same_as<std::common_type_t<T, U>, std::common_type_t<U, T>> &&
	  requires {
	  static_cast<std::common_type_t<T, U>>(std::declval<T>());
	  static_cast<std::common_type_t<T, U>>(std::declval<U>());
	  } &&
	  std::common_reference_with<
       (since C++20)
	  std::add_lvalue_reference_t<const T>,
	  std::add_lvalue_reference_t<const U>>	&&
	  std::common_reference_with<
	  std::add_lvalue_reference_t<std::common_type_t<T, U>>,
	  std::common_reference_t<
	  std::add_lvalue_reference_t<const T>,

	  std::add_lvalue_reference_t<const U>>>;

	  The concept common_with<T, U>	specifies that two types T and U share
       a common	type
	  (as computed by std::common_type_t) to which both can	be converted.

	 Semantic requirements

	  T  and  U model common_with<T, U> only if, given equality-preserving
       expressions t1,
	  t2, u1 and u2	such that decltype((t1)) and decltype((t2)) are	both T
       and
	  decltype((u1)) and decltype((u2)) are	both U,

	    * std::common_type_t<T, U>(t1) equals std::common_type_t<T,	U>(t2)
       if and only if
	      t1 equals	t2; and
	    * std::common_type_t<T, U>(u1) equals std::common_type_t<T,	U>(u2)
       if and only if
	      u1 equals	u2.

	  In other words, the conversion to  the  common  type	must  preserve
       equality.

	 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.

See also
	  common_type		  determines  the  common  type	 of a group of
       types
	  (C++11)		 (class	template)
	  common_reference	 determines the	common	reference  type	 of  a
       group of	types
	  basic_common_reference (class	template)
	  (C++20)
	  common_reference_with	  specifies that two types share a common ref-
       erence type
	  (C++20)		 (concept)

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

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

home | help