title: non-defaulted operator <=> doesn't generate == and != in C++20
body: <p>I'm running into a strange behavior with the new spaceship operator <code>&lt;=&gt;</code> in C++20. I'm using Visual Studio 2019 compiler with <code>/std:c++latest</code>.</p>
  
  <p>This code compiles fine, as expected:</p>
  
  <pre><code>#include &lt;compare&gt;
  
  struct X
  {
      int Dummy = 0;
      auto operator&lt;=&gt;(const X&amp;) const = default; // Default implementation
  };
  
  int main()
  {
      X a, b;
  
      a == b; // OK!
  
      return 0;
  }
  </code></pre>
  
  <p>However, if I change <strong>X</strong> to this:</p>
  
  <pre><code>struct X
  {
      int Dummy = 0;
      auto operator&lt;=&gt;(const X&amp; other) const
      {
          return Dummy &lt;=&gt; other.Dummy;
      }
  };
  </code></pre>
  
  <p>I get the following compiler error:</p>
  
  <p><code>error C2676: binary '==': 'X' does not define this operator or a conversion to a type acceptable to the predefined operator</code></p>
  
  <p>I tried this on clang as well, and I get similar behavior.</p>
  
  <p>I would appreciate some explanation on why the default implementation generates <code>operator==</code> correctly, but the custom one doesn't.</p>