title: What is the rationale for limitations on pointer arithmetic or comparison?
body: <p>In C/C++, <a href="http://eel.is/c++draft/expr.add#4" rel="noreferrer">addition or subtraction on pointer</a> is defined only if the resulting pointer lies within the original pointed <a href="http://eel.is/c++draft/intro.object#2" rel="noreferrer">complete object</a>. Moreover, <a href="http://eel.is/c++draft/expr.rel#3" rel="noreferrer">comparison</a> of two pointers can only be performed if the two pointed objects are subobjects of a unique <em>complete object</em>.</p>
  
  <p>What are the reasons of such limitations?</p>
  
  <p>I supposed that segmented memory model (see <a href="http://developer.amd.com/wordpress/media/2012/10/24593_APM_v21.pdf" rel="noreferrer">here</a> §1.2.1) could be one of the reasons but since compilers can actually define a total order on all pointers as demonstrated by this <a href="https://stackoverflow.com/a/47612863/5632316">answer</a>, I am doubting this.</p>