static constexpr bool is_always_lock_free;
static constexpr size_t required_alignment;
atomic_ref(T& obj);
atomic_ref(const atomic_ref& ref) noexcept;
T operator=(T desired) const noexcept;
operator T() const noexcept;
bool is_lock_free() const noexcept;
void store(T desired, memory_order order = memory_order_seq_cst) const noexcept;
T load(memory_order order = memory_order_seq_cst) const noexcept;
T exchange(T desired, memory_order order = memory_order_seq_cst) const noexcept;
bool compare_exchange_weak(T& expected, T desired,
memory_order success, memory_order failure) const noexcept;
bool compare_exchange_strong(T& expected, T desired,
memory_order success, memory_order failure) const noexcept;
bool compare_exchange_weak(T& expected, T desired,
memory_order order = memory_order_seq_cst) const noexcept;
bool compare_exchange_strong(T& expected, T desired,
memory_order order = memory_order_seq_cst) const noexcept;