title: C++ overloading comparison operators vs casting operators
body: <p>Why don't we need to specify the return type when overloading a casting operator like bool/string</p>
  
  <pre><code>operator bool()
  </code></pre>
  
  <p>but we need to define the return type when overloading a comparison operator (!, >, &lt;) </p>
  
  <pre><code>bool&amp; operator ! ()
  </code></pre>
  
  <p>Why don't we define it as <code>bool operator bool()</code> instead.</p>