31 Atomic operations library [atomics]

31.9 Non-member functions [atomics.nonmembers]

A non-member function template whose name matches the pattern atomic_­f or the pattern atomic_­f_­explicit invokes the member function f, with the value of the first parameter as the object expression and the values of the remaining parameters (if any) as the arguments of the member function call, in order.
An argument for a parameter of type atomic<T>​::​value_­type* is dereferenced when passed to the member function call.
If no such member function exists, the program is ill-formed.
[Note:
The non-member functions enable programmers to write code that can be compiled as either C or C++, for example in a shared header file.
— end note]