Effects: Retrieves the value in
expected. It then atomically
compares the value representation of the value pointed to by
this
for equality with that previously retrieved from
expected,
and if true, replaces the value pointed to
by
this with that in
desired. If and only if the comparison is
true, memory is affected according to the
value of
success, and if the comparison is false, memory is affected according
to the value of
failure. When only one
memory_order argument is
supplied, the value of
success is
order, and the value of
failure is
order except that a value of
memory_order::acq_rel
shall be replaced by the value
memory_order::acquire and a value of
memory_order::release shall be replaced by the value
memory_order::relaxed. If and only if the comparison is false then, after the atomic operation,
the value in
expected is replaced by the value
pointed to by
this during the atomic comparison
. If the operation returns
true, these
operations are atomic read-modify-write
operations (
[intro.multithread]) on the memory
pointed to by
this. Otherwise, these operations are atomic load operations on that memory
.