[atomics.ref.ops] (original) (raw)

Effects: Retrieves the value in expected.

It then atomically compares the value representation of the value referenced by *ptr for equality with that previously retrieved from expected, and if true, replaces the value referenced by *ptrwith 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 orderexcept 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 read from the value referenced by *ptrduring the atomic comparison.

If the operation returns true, these operations are atomic read-modify-write operations ([intro.races]) on the value referenced by *ptr.

Otherwise, these operations are atomic load operations on that memory.