constexpr polymorphic& operator=(const polymorphic& other); | (1) | (since C++26) |
constexpr polymorphic& operator=( polymorphic&& other) noexcept(/* see below */); | (2) | (since C++26) |
| | |
Replaces contents of*this with the contents ofother.
Lettraits bestd::allocator_traits<Allocator>:
1) If
std::addressof(other)== this is
true, does nothing. Otherwise, let
need_update be
traits::propagate_on_container_copy_assignment::value:
- Ifother is valueless, proceeds to the next step. Otherwise, constructs a new owned object in*this usingtraits::construct with*other as the argument, using the allocatorupdate_alloc? other.
alloc : alloc. - The previously owned object in*this (if any) is destroyed usingtraits::destroy and then the storage is deallocated.
After updating the object owned by
*this, if
need_update is
true,
alloc is replaced with a copy of
other.alloc.
2) If
std::addressof(other)== this is
true, does nothing. Otherwise, let
need_update be
traits::propagate_on_container_move_assignment::value:
- If
alloc == other.alloc istrue, swaps the owned objects in*this andother; the owned object inother (if any) is then destroyed usingtraits::destroy and then the storage is deallocated. - Otherwise:
- Ifother is valueless, proceeds to the next step. Otherwise, constructs a new owned object in*this usingtraits::construct withstd::move(*other) as the argument, using the allocatorupdate_alloc? other.
alloc : alloc. - The previously owned object in*this (if any) is destroyed usingtraits::destroy and then the storage is deallocated.
After updating the objects owned by
*this and
other, if
need_update is
true,
alloc is replaced with a copy of
other.alloc.
If all following conditions are satisfied, the program is ill-formed:
[edit]Parameters
| other | - | anotherpolymorphic object whose owned value (if exists) is used for assignment |
[edit]Return value
*this
[edit]Exceptions
1) If any exception is thrown, there are no effects on*this.
2) If any exception is thrown, there are no effects on*this orother.
[edit]Example
| This section is incomplete Reason: no example |