operator delete standard behavior
<p>I can't understand what standard need to do with calling operator delete for void* == nullptr.</p>

<p>Something like this:</p>

<pre><code>void foo(void* ptr) // ptr == nullptr here
{
    delete ptr;
}
</code></pre>

<p>On the one hand, we have the following statement in standard:</p>

<p><strong>ISO/IEC 14882:2011</strong></p>

<p>5.3.5 Delete [expr.delete]</p>

<blockquote>
  <p>1 ... The operand shall have a pointer to object type, or a class type
  having a single non-explicit conversion function (12.3.2) to a pointer
  to object type. The result has type void.78</p>
  
  <p>78) <strong>This implies that an object cannot be deleted using a pointer of
  type void* because void is not an object type</strong>.</p>
</blockquote>

<p>which makes code with deleting void* ill-formed. On the other hand, we have another statement about nullptr in delete:</p>

<p><strong>ISO/IEC 14882:2011</strong></p>

<p>5.3.5 Delete [expr.delete]</p>

<blockquote>
  <p>2 ... In the first alternative (delete object), <strong>the value of the
  operand of delete may be a null pointer value</strong>, a pointer to a
  non-array object created by a previous new-expression, or a pointer to
  a subobject (1.8) representing a base class of such an object (Clause
  10). If not, the behavior is undefined. In the second alternative
  (delete array), <strong>the value of the operand of delete may be a null
  pointer value</strong> or a pointer value that resulted from a previous array
  new-expression.79 If not, the behavior is undefined.</p>
</blockquote>

<p>What implementation need to do in such kind of situation?</p>
