title: Why don't C++ compilers define operator== and operator!=?
body: <p>I am a big fan of letting the compiler do as much work for you as possible.  When writing a simple class the compiler can give you the following for 'free':</p>
  
  <ul>
  <li>A default (empty) constructor</li>
  <li>A copy constructor</li>
  <li>A destructor</li>
  <li>An assignment operator (<code>operator=</code>)</li>
  </ul>
  
  <p>But it cannot seem to give you any comparison operators - such as <code>operator==</code> or <code>operator!=</code>.  For example:</p>
  
  <pre><code>class foo
  {
  public:
      std::string str_;
      int n_;
  };
  
  foo f1;        // Works
  foo f2(f1);    // Works
  foo f3;
  f3 = f2;       // Works
  
  if (f3 == f2)  // Fails
  { }
  
  if (f3 != f2)  // Fails
  { }
  </code></pre>
  
  <p>Is there a good reason for this?  Why would performing a member-by-member comparison be a problem?  Obviously if the class allocates memory then you'd want to be careful, but for a simple class surely the compiler could do this for you?</p>