title: Questions about Hinnant's stack allocator
body: <p>I've been using Howard Hinnant's <a href="http://howardhinnant.github.io/stack_alloc.h">stack allocator</a> and it works like a charm, but some details of the implementation are a little unclear to me.</p>
  
  <ol>
  <li>Why are global operators <code>new</code> and <code>delete</code> used? The <code>allocate()</code> and <code>deallocate()</code> member functions use <code>::operator new</code> and <code>::operator delete</code> respectively. Similarly, the member function <code>construct()</code> uses the global placement new. Why not allow for any user-defined global or class-specific overloads?</li>
  <li>Why is alignment set to hard-coded 16 bytes instead of <code>std::alignment_of&lt;T&gt;</code>?</li>
  <li>Why do the constructors and <code>max_size</code> have a <code>throw()</code> exception specification? Isn't this discouraged (see e.g. More Effective C++ Item 14.)? Is it really necessary to terminate and abort when an exception occurs in the allocator? Does this change with the new C++11 <code>noexcept</code> keyword?</li>
  <li>The <code>construct()</code> member function would be an ideal candidate for perfect forwarding (to the constructor that is being called). Is this the way to write C++11 conformant allocators?</li>
  <li>What other changes are necessary to make the current code C++11 conformant?</li>
  </ol>