title: Why does std::atomic_fetch take a pointer as its input parameter
body: <p>The set of free functions for <code>std::atomic_fetch_xxx</code> <em>(or, and, add, sub, xor)</em>, take as input a <code>std::atomic&lt;T&gt;*</code> named obj:</p>
  
  <pre><code>template&lt; class T &gt;
  T atomic_fetch_sub(std::atomic&lt;T&gt;* obj,
                     typename std::atomic&lt;T&gt;::difference_type arg ) noexcept;
  </code></pre>
  
  <hr>
  
  <p>Question: Why is the std::atomic type taken as a pointer and not instead passed in as a reference eg:</p>
  
  <pre><code>T atomic_fetch_sub(std::atomic&lt;T&gt;&amp; obj,
                     typename std::atomic&lt;T&gt;::difference_type arg ) noexcept;
  </code></pre>
  
  <p>Is there a practical rational/reason or is it simply stylistic?</p>