title: Is the operation "false < true" well defined?
body: <p>Does the C++ specification define:</p>
  
  <ol>
  <li>the existence of the 'less than' operator for boolean parameters, and if so,</li>
  <li>the result of the 4 parameter permutations?</li>
  </ol>
  
  <p>In other words, are the results from the following operations defined by the specification?</p>
  
  <pre><code>false &lt; false
  false &lt; true
  true &lt; false
  true &lt; true
  </code></pre>
  
  <p>On my setup (Centos 7, gcc 4.8.2) , the code below spits out what I'd expect (given C's history of representing false as 0 and true as 1):</p>
  
  <pre><code>false &lt; false = false
  false &lt; true = true
  true &lt; false = false
  true &lt; true = false
  </code></pre>
  
  <p>Whilst I'm pretty sure most (all?) compilers will give the same output, is this legislated by the C++ specification? Or is an obfuscating, but specification-compliant compiler allowed to decide that true is less than false?</p>
  
  <pre><code>#include &lt;iostream&gt;
  
  const char * s(bool a)
  {
    return (a ? "true" : "false");
  }
  
  void test(bool a, bool b)
  {
    std::cout &lt;&lt; s(a) &lt;&lt; " &lt; " &lt;&lt; s(b) &lt;&lt; " = " &lt;&lt; s(a &lt; b) &lt;&lt; std::endl;
  }
  
  int main(int argc, char* argv[])
  {
    test(false, false);
    test(false, true);
    test(true, false);
    test(true, true);
    return 0;
  }
  </code></pre>