std::polymorphic<T, Allocator>::operator=
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 of other.
Let traits be std::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: - If
otheris valueless, proceeds to the next step. Otherwise, constructs a new owned object in*thisusing traits::construct with*otheras the argument, using the allocatorupdate_alloc?other.alloc : alloc. - The previously owned object in
*this(if any) is destroyed using traits::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.
If
2) If T is an incomplete type, the program is ill-formed.std::addressof(other) == this is true, does nothing. Otherwise, let need_update be traits::propagate_on_container_move_assignment::value: - If
alloc ==other.allocistrue, swaps the owned objects in*thisandother; the owned object inother(if any) is then destroyed using traits::destroy and then the storage is deallocated. - Otherwise:
- If
otheris valueless, proceeds to the next step. Otherwise, constructs a new owned object in*thisusing traits::construct withstd::move(*other)as the argument, using the allocatorupdate_alloc?other.alloc : alloc. - The previously owned object in
*this(if any) is destroyed using traits::destroy and then the storage is deallocated.
After updating the objects owned by
If all following conditions are satisfied, the program is ill-formed: *this and other, if need_update is true, alloc is replaced with a copy of other.alloc.-
std::allocator_traits<Allocator>::is_always_equal::valueisfalse. -
Tis an incomplete type.
Parameters
| other | - | another polymorphic object whose owned value (if exists) is used for assignment |
Return value
*this
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 or other.noexcept specification: noexcept(std::allocator_traits<Allocator>::
propagate_on_container_move_assignment::value
|| std::allocator_traits<Allocator>::is_always_equal::value)
Example
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/polymorphic/operator%3D