std::experimental::atomic_weak_ptr<T>::compare_exchange_strong, std::experimental::atomic_weak_ptr<T>::compare_exchange_weak

Atomically compares the underlying weak_ptr in *this with expected, and if they are equivalent, replaces the former with desired (performs read-modify-write operation). Otherwise, loads the actual value stored in *this into expected (performs load operation). The replacement is performed as if by the copy or move assignment operator of weak_ptr, as appropriate.

# Declarations

bool compare_exchange_weak( std::weak_ptr<T>& expected, const std::weak_ptr<T>& desired,
std::memory_order success, std::memory_order failure ) noexcept;
bool compare_exchange_weak( std::weak_ptr<T>& expected, std::weak_ptr<T>&& desired,
std::memory_order success, std::memory_order failure ) noexcept;
bool compare_exchange_weak( std::weak_ptr<T>& expected, const std::weak_ptr<T>& desired,
std::memory_order order = std::memory_order_seq_cst ) noexcept;
bool compare_exchange_weak( std::weak_ptr<T>& expected, std::weak_ptr<T>&& desired,
std::memory_order order = std::memory_order_seq_cst ) noexcept;
bool compare_exchange_strong( std::weak_ptr<T>& expected, const std::weak_ptr<T>& desired,
std::memory_order success, std::memory_order failure ) noexcept;
bool compare_exchange_strong( std::weak_ptr<T>& expected, std::weak_ptr<T>&& desired,
std::memory_order success, std::memory_order failure ) noexcept;
bool compare_exchange_strong( std::weak_ptr<T>& expected, const std::weak_ptr<T>& desired,
std::memory_order order = std::memory_order_seq_cst ) noexcept;
bool compare_exchange_strong( std::weak_ptr<T>& expected, std::weak_ptr<T>&& desired,
std::memory_order order = std::memory_order_seq_cst ) noexcept;

# Parameters

# Return value

true if the underlying atomic value was changed, false otherwise.

# Notes

The weak forms (1-4) of the functions are allowed to fail spuriously, that is, act as if *this and expected are not equivalent even when they are. When a compare-and-exchange is in a loop, the weak version will yield better performance on some platforms.

# See also