title: Pointer addition vs subtraction
body: <p>$5.7 -</p>
  
  <p>"[..]For addition, either both operands shall have arithmetic or enumeration type, or one operand shall be a pointer to a completely defined object type and the other shall have integral or enumeration type.</p>
  
  <p>2 For subtraction, one of the following shall hold:
  — both operands have arithmetic or enumeration type; or
  — both operands are pointers to cv-qualified or cv-unqualified versions of the same completely defined object type; or
  — the left operand is a pointer to a completely defined object type and the right operand has integral or enumeration type.</p>
  
  <pre><code>int main(){
          int buf[10];
          int *p1 = &amp;buf[0];
          int *p2 = 0;
  
          p1 + p2;       // Error
  
          p1 - p2;       // OK
  }
  </code></pre>
  
  <p>So, my question is <em>why</em> 'pointer addition' is not supported in C++ but 'pointer subtraction' is?</p>