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

FreeBSD Manual Pages

  
 
  

home | help
std::common_reference_with(3) C++ Standard Libarystd::common_reference_with(3)

NAME
       std::common_reference_with - std::common_reference_with

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

	  concept common_reference_with	=
	  std::same_as<std::common_reference_t<T,			   U>,
       (since C++20)
	  std::common_reference_t<U, T>> &&
	  std::convertible_to<T, std::common_reference_t<T, U>>	&&

	  std::convertible_to<U, std::common_reference_t<T, U>>;

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

	 Semantic requirements

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

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

	  In other words, the conversion to the	 common	 reference  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_reference	  determines  the  common  reference type of a
       group of	types
	  basic_common_reference (class	template)
	  (C++20)
	  common_with		 specifies that	two types share	a common type
	  (C++20)		 (concept)
	  common_type		 determines the	common	type  of  a  group  of
       types
	  (C++11)		 (class	template)

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

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

home | help