On this page
std::assignable_from
Defined in header <concepts> |
||
|---|---|---|
|
(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 objectlcopysuch thatdecltype((lhs))isLHS,rhs, an expression such thatdecltype((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:lhsis equal torcopy, unlessrhsis a non-const xvalue that refers tolcopy(i.e., the assignment is a self-move-assignment),- if
rhsis 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) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/concepts/assignable_from