[atomics.nonmembers]

# 32 Concurrency support library [[thread]](./#thread)

## 32.5 Atomic operations [[atomics]](atomics#nonmembers)

### 32.5.9 Non-member functions [atomics.nonmembers]

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/threads.tex#L6779)

A non-member function template whose name matches the patternatomic_*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[.](#1.sentence-1)

An argument
for a parameter of type atomic<T>​::​value_type* is dereferenced when
passed to the member function call[.](#1.sentence-2)

If no such member function exists, the program is ill-formed[.](#1.sentence-3)

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/threads.tex#L6789)

[*Note [1](#note-1)*:

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[.](#2.sentence-1)

â *end note*]
