Remarks: If the result is not a representable value for its type (
[expr.pre]),
the result is unspecified,
but the operations otherwise have no undefined behavior
. Atomic arithmetic operations on
floating-point-type
should conform to the
numeric_limits<floating-point-type>
traits associated with the floating-point type (
[limits.syn])
. The floating-point environment (
[cfenv])
for atomic arithmetic operations on
floating-point-type
may be different than the calling thread's floating-point environment
. The arithmetic rules of floating-point atomic modify-write operations
may be different from operations on floating-point types or
atomic floating-point types
. [
Note 1:
Tree reductions are permitted for atomic modify-write operations
. —
end note]
For
store_fmaximum and
store_fminimum,
the maximum and minimum computation is performed
as if by
fmaximum and
fminimum, respectively,
with
*ptr and the first parameter as the arguments
.For
store_fmaximum_num and
store_fminimum_num,
the maximum and minimum computation is performed
as if by
fmaximum_num and
fminimum_num, respectively,
with
*ptr and the first parameter as the arguments
.For
store_max and
store_min,
the maximum and minimum computation is performed
as if by
fmaximum_num and
fminimum_num, respectively,
with
*ptr and the first parameter as the arguments, except that:
If both arguments are NaN, an unspecified NaN value is stored at
*ptr.If exactly one argument is a NaN,
either the other argument or an unspecified NaN value is stored at
*ptr,
it is unspecified which
.If the arguments are differently signed zeros,
which of these values is stored at
*ptr is unspecified
.Recommended practice: The implementation of
store_max and
store_min
should treat negative zero as smaller than positive zero
. constexpr value_type operator op=(value_type operand) const noexcept;
Effects: Equivalent to:
return fetch_key(operand) op operand;