|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
(C++20) | ||||
(C++20) | ||||
(C++20) | ||||
| Constants | ||||
(C++17) | ||||
| Specialized member functions | ||||
| Specialized for integral, floating-point(C++20) and pointer types | ||||
atomic::fetch_sub | ||||
| Specialized for integral and pointer types only | ||||
(C++26) | ||||
(C++26) | ||||
| Specialized for integral types only | ||||
member only of atomic<Integral > specializationsand atomic<Floating > specializations(since C++20) | ||
T fetch_sub( T arg,std::memory_order order= std::memory_order_seq_cst)noexcept; | (1) | (since C++11) |
T fetch_sub( T arg,std::memory_order order= std::memory_order_seq_cst)volatilenoexcept; | (2) | (since C++11) |
member only of atomic<T*> partial specialization | ||
T* fetch_sub(std::ptrdiff_t arg, std::memory_order order= | (3) | (since C++11) |
T* fetch_sub(std::ptrdiff_t arg, std::memory_order order= | (4) | (since C++11) |
Atomically replaces the current value with the result of arithmetic subtraction of the value andarg. That is, it performs atomic post-decrement. The operation is read-modify-write operation. Memory is affected according to the value oforder.
For floating-point types, thefloating-point environment in effect may be different from the calling thread's floating-point environment. The operation need not be conform to the correspondingstd::numeric_limits traits but is encouraged to do so. If the result is not a representable value for its type, the result is unspecified but the operation otherwise has no undefined behavior. | (since C++20) |
T is not a complete object type, the program is ill-formed.It is deprecated ifstd::atomic<T>::is_always_lock_free isfalse and overload(2) or(4) participates in overload resolution. | (since C++20) |
Contents |
| arg | - | the other argument of arithmetic subtraction |
| order | - | memory order constraints to enforce |
The value immediately preceding the effects of this function in themodification order of*this.
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| P0558R1 | C++11 | arithmetic permitted on pointers to (possibly cv-qualified)void or function | made ill-formed |
(C++11)(C++11) | subtracts a non-atomic value from an atomic object and obtains the previous value of the atomic (function template)[edit] |
| increments or decrements the atomic value by one (public member function)[edit] |