title: Why do we use Concept&Constraint
body: <p>I don't really understand why C++20 provides such a feature like that. I need someone to point out how to use this feature gracefully.
  Here is an example:</p>
  <pre><code>template&lt;typename T&gt;
  concept LessCompareable=requires(const T&amp; lhs, const T&amp; rhs)
  {
        {lhs&lt;rhs}-&gt;bool;
  };
  </code></pre>
  <p>Now I've defined a concept.
  Then I'll constraint a function template like this:
  (well, let's name it <em>comp</em>, in fact it just like <code>std::min</code>)</p>
  <pre><code>template&lt;typename T&gt;
  const T&amp; comp(const T&amp; a , const T&amp; b) requires LessCompareable&lt;T&gt;
  {return a&lt;b?a:b;}
  </code></pre>
  <p>So the problem is if you call this like</p>
  <pre><code>std::thread a,b;
  cout&lt;&lt;comp(a,b);
  </code></pre>
  <p><strong>complie error occured</strong></p>
  <p>but if we don't use constraint, CE will occur, too.</p>
  <p>So that makes me puzzled, both of them have CE, then why I should use constraints?</p>
  <p>I think if I want to clean up error messages, I can use SFINAE.</p>