title: Why is ::operator new[] necessary when ::operator new is enough?
body: <p>As we know, the C++ standard defines two forms of global allocation functions:</p>
  
  <pre><code>void* operator new(size_t);
  void* operator new[](size_t);
  </code></pre>
  
  <p>And also, the draft C++ standard (18.6.1.2 n3797) says:</p>
  
  <blockquote>
    <p>227) It is not the direct responsibility of operator
    new or operator delete to note the repetition
    count or element size of the array. Those operations are performed
    elsewhere in the array new and delete expressions. The array new
    expression, may, however, increase the size argument to operator
    new to obtain space to store supplemental information.</p>
  </blockquote>
  
  <p>What makes me confused is:</p>
  
  <p>What if we remove <code>void* operator new[](size_t);</code> from the standard, and just use <code>void* operator new(size_t)</code> instead? What's the rationale to define a redundant global allocation function?</p>