If an atomic ([atomics.types.generic]) specialization has one of the following overloads,
then that overload participates in overload resolution
even if atomic<T>::is_always_lock_free is false:
void store(T desired, memory_order order = memory_order::seq_cst)volatilenoexcept;
T operator=(T desired)volatilenoexcept;
T load(memory_order order = memory_order::seq_cst)constvolatilenoexcept;
operator T()constvolatilenoexcept;
T exchange(T desired, memory_order order = memory_order::seq_cst)volatilenoexcept;
bool compare_exchange_weak(T& expected, T desired,
memory_order success, memory_order failure)volatilenoexcept;
bool compare_exchange_strong(T& expected, T desired,
memory_order success, memory_order failure)volatilenoexcept;
bool compare_exchange_weak(T& expected, T desired,
memory_order order = memory_order::seq_cst)volatilenoexcept;
bool compare_exchange_strong(T& expected, T desired,
memory_order order = memory_order::seq_cst)volatilenoexcept;
T fetch_key(T operand, memory_order order = memory_order::seq_cst)volatilenoexcept;
T operatorop=(T operand)volatilenoexcept;
T* fetch_key(ptrdiff_t operand, memory_order order = memory_order::seq_cst)volatilenoexcept;
The macro expands to a token sequence suitable for constant initialization of
an atomic variable of static storage duration of a type that
is initialization-compatible with value.