title: Why does std::basic_string_view have two equality comparison operators?
body: <p>A quote from the standard regarding <code>std::basic_string_view</code> equality comparison operators (see <a href="http://eel.is/c++draft/string.view#comparison" rel="noreferrer">http://eel.is/c++draft/string.view#comparison</a>):</p>
  <blockquote>
  <p>[Example 1: A sample conforming implementation for operator== would be:</p>
  </blockquote>
  <pre><code>template&lt;class charT, class traits&gt;
  constexpr bool operator==(basic_string_view&lt;charT, traits&gt; lhs,
                          basic_string_view&lt;charT, traits&gt; rhs) noexcept {
      return lhs.compare(rhs) == 0;
  }
  template&lt;class charT, class traits&gt;
  constexpr bool operator==(basic_string_view&lt;charT, traits&gt; lhs,
                          type_identity_t&lt;basic_string_view&lt;charT, traits&gt;&gt; rhs) noexcept {
      return lhs.compare(rhs) == 0;
  }
  </code></pre>
  <blockquote>
  <p>— end example]</p>
  </blockquote>
  <p>Won't the second comparison operator be sufficient for all use cases? If the answer is no please provide the example code that will stop working (or will work differently) if the first comparison operator is removed. If the answer is yes then why does the C++ standard explicitly require the first operator to be defined?</p>