title: "is not required" == undefined behavior?
body: <p>My question is mainly about terminology and how to interpret the standard.</p>
  <p><a href="https://eel.is/c++draft/expr.rel#4" rel="noreferrer">[expr.rel]#4</a>:</p>
  <blockquote>
  <p>The result of comparing unequal pointers to objects is defined in terms of a partial order consistent with the following rules:</p>
  <p>(4.1) If two pointers point to different elements of the same array,
  or to subobjects thereof, the pointer to the element with the higher
  subscript is required to compare greater.</p>
  <p>(4.2) If two pointers point
  to different non-static data members of the same object, or to
  subobjects of such members, recursively, the pointer to the later
  declared member is required to compare greater provided the two
  members have the same access control ([class.access]), neither member
  is a subobject of zero size, and their class is not a union.</p>
  <p>(4.3) Otherwise, neither pointer is required to compare greater than the
  other.</p>
  </blockquote>
  <p>I am little confused as how to interpret (4.3). Does that mean that this</p>
  <pre><code>#include &lt;iostream&gt;
  int main() {
      int x;
      int y;
      std::cout &lt;&lt; (&amp;x &lt; &amp;y);
      std::cout &lt;&lt; (&amp;x &lt; &amp;y);
  }
  </code></pre>
  <p>is...</p>
  <ul>
  <li>valid C++ code and the output is either <code>11</code> or <code>00</code>.</li>
  <li>invalid code, because it has undefined behaivour</li>
  </ul>
  <p>?</p>
  <p>In other words, I know that (4.3) does apply here, but I am not sure about the implications. When the standard says &quot;it can be either A or B&quot; is this the same as saying &quot;it is undefined&quot; ?</p>