std::assignable_from
Defined in header <concepts>
|
||
template< class LHS, class RHS > concept assignable_from = |
(since C++20) | |
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 expression whose type is specified by LHS
.
Semantic requirements
Given
-
lhs
, an lvalue that refers to an objectlcopy
such that decltype((lhs)) isLHS
, -
rhs
, an expression such that decltype((rhs)) isRHS
, -
rcopy
, a distinct object that is equal torhs
,
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 torcopy
, unlessrhs
is a non-const xvalue that refers tolcopy
(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
Expressions declared in requires-expressions of the standard library concepts are required to be equality-preserving (except where stated otherwise).
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 a node-based data structure, or with something like std::vector<std::any>).
See also
(C++11)(C++11)(C++11) |
checks if a type has an assignment operator for a specific argument (class template) |