constexpr indirect& operator=(const indirect& other); | (1) | (since C++26) |
constexpr indirect& operator=( indirect&& other)noexcept(/* see below */); | (2) | (since C++26) |
template<class U= T> constexpr indirect& operator=( U&& value); | (3) | (since C++26) |
| | |
Replaces contents of*this withvalue or 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,*this becomes valueless and the object owned by*this (if any) is destroyed usingtraits::destroy and then the storage is deallocated.
- Otherwise, if
alloc == other.alloc istrue and*this is not valueless, equivalent to**this=*other. - 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.
p points to the new owned object.
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:
- Ifother is valueless,*this becomes valueless and the object owned by*this (if any) is destroyed usingtraits::destroy and then the storage is deallocated.
- Otherwise, 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:
- 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.
p points to the new owned object.
After updating the objects owned by
*this and
other, if
need_update is
true,
alloc is replaced with a copy of
other.alloc.
3) If
*this is valueless, then constructs an owned object with
std::forward<U>(value) using
alloc . Otherwise, equivalent to
**this=std::forward<U>(value).
This overload participates in overload resolution only if all following conditions are satisfied:
[edit]Parameters
| other | - | anotherindirect object whose owned value (if exists) is used for assignment |
| value | - | value to assign to or construct the owned value |
[edit]Return value
*this
[edit]Exceptions
1) If any exception is thrown, the result ofthis->valueless_after_move() remains unchanged.
If an exception is thrown during the call toT’s selected copy constructor, no effect.
If an exception is thrown during the call to
T’s copy assignment operator, the state of
this->p is as defined by the exception safety guarantee of
T’s copy assignment operator.
2) If any exception is thrown, there are no effects on*this orother.
[edit]Example
| This section is incomplete Reason: no example |