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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::assignable_from - std::assignable_from

Synopsis
	  Defined in header <concepts>
	  template< class LHS, class RHS >

	  concept assignable_from =
	  std::is_lvalue_reference_v<LHS> &&
	  std::common_reference_with<
	  const	   std::remove_reference_t<LHS>&,			(since
       C++20)
	  const	std::remove_reference_t<RHS>&> &&
	  requires(LHS lhs, RHS&& rhs) {
	  { lhs	= std::forward<RHS>(rhs) } -> std::same_as<LHS>;

	  };

	  The concept assignable_from<LHS, RHS>	specifies that	an  expression
       of the type and
	  value	category specified by RHS can be assigned to an	lvalue expres-
       sion whose type
	  is specified by LHS.

	 Semantic requirements

	  Given

	    *  lhs,  an	 lvalue	 that  refers to an object lcopy such that de-
       cltype((lhs)) is	LHS,
	    * rhs, an expression such that decltype((rhs)) is RHS,
	    * rcopy, a distinct	object that is equal to	rhs,

	  assignable_from<LHS, RHS> is modeled only if

	    * std::addressof(lhs = rhs)	==  std::addressof(lcopy)  (i.e.,  the
       assignment
	      expression yields	an lvalue referring to the left	operand);
	    * After evaluating lhs = rhs:

		 *  lhs	 is  equal  to rcopy, unless rhs is a non-const	xvalue
       that refers to
		   lcopy (i.e.,	the assignment is a self-move-assignment),
		 * if rhs is a glvalue:

		      *	If it is a non-const xvalue, the object	 to  which  it
       refers is in a
			valid but unspecified state;
		      *	Otherwise, the object it refers	to is not modified;

	 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.

	  Unless  noted	otherwise, every expression used in a requires-expres-
       sion is required
	  to be	equality preserving and	stable,	and the	evaluation of the  ex-
       pression	may
	  modify  only	its  non-constant operands. Operands that are constant
       must not	be
	  modified.

Notes
	  Assignment need not be a total function. In particular, if assigning
       to some object
	  x can	cause some other object	y to be	modified, then x = y is	likely
       not in the
	  domain of =. This typically happens if the right  operand  is	 owned
       directly	or
	  indirectly  by  the left operand (e.g., with smart pointers to nodes
       in an node-based
	  data structure, or with something like std::vector<std::any>).

See also
	  is_assignable
	  is_trivially_assignable checks if a type has a  assignment  operator
       for a specific
	  is_nothrow_assignable	  argument
	  (C++11)		  (class template)
	  (C++11)
	  (C++11)

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

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

home | help