title: Calling delete on NULL pointers - C++03 vs C++11
body: <p>In the C++03 Standard, I see:</p>
  <blockquote>
  <p><strong>5.3.5 Delete</strong></p>
  <p>2 If the operand has a class type, the operand is converted to a pointer type by calling the above-mentioned conversion function, and the converted operand is used in place of the original operand for the remainder of this section. <strong>In either alternative, if the value of the operand of <code>delete</code> is the null pointer the operation has no effect.</strong> In the first alternative (<em>delete object</em>), the value of the operand of <code>delete</code> shall be a pointer to a non-array object or a pointer to a sub-object (1.8) representing a base class of such an object (clause 10). If not, the behavior is undefined. In the second alternative (<em>delete array</em>), the value of the operand of <code>delete</code> shall be the pointer value which resulted from a previous array new-expression.72) If not, the behavior is undefined.</p>
  </blockquote>
  <p>In the C++11 Draft Standard (N3337), I see:</p>
  <blockquote>
  <p><strong>5.3.5 Delete</strong></p>
  <p>2 If the operand has a class type, the operand is converted to a pointer type by calling the above-mentioned conversion function, and the converted operand is used in place of the original operand for the remainder of this section. In the first alternative (<em>delete object</em>), <strong>the value of the operand of <code>delete</code> may be a null pointer value,</strong> a pointer to a non-array object created by a previous <em>new-expression</em>, 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 (<em>delete array</em>), the value of the operand of delete may be a null pointer value or a pointer value that resulted from a previous array <em>new-expression</em>. If not, the behavior is undefined.</p>
  </blockquote>
  <p>I have highlighted the differences between the specifications in the two standards. I find it strange that the 2003 standard was more emphatic on how NULL pointers must be dealt with while the 2011 standard says nothing about what an implementation must do.</p>
  <ol>
  <li><p>Did the verbiage of the C++11 standard change between the draft standard and the actual standard? If so, how?</p>
  </li>
  <li><p>If the verbiage of the draft standard remains unchanged in the actual standard, what was the rationale for changing a very strong statement to almost nothing between 2003 and 2011?</p>
  </li>
  </ol>