title: C++20 concept syntax - what does the requires parameter variables mean?
body: <p>Many articles give examples like this:</p>
  <pre><code>template&lt;typename T&gt;
  concept Equal = requires(T a, T b) {
      { a == b } -&gt; std::same_as&lt;bool&gt;;
  };
  </code></pre>
  <p>Does it make any difference if I write:</p>
  <pre><code>template&lt;typename T&gt;
  concept Equal = requires(T a) {
      { a == a } -&gt; std::same_as&lt;bool&gt;;
  };
  </code></pre>
  <p>If it doesn't, why was the syntax designed like this? Why do they ask me to declare these variables like <code>a</code> or <code>b</code>?</p>
  <p>Why do I need multiple variables of the same type? And why do I even need variables?</p>
  <pre><code>template&lt;typename T&gt;
  concept Equal = requires {
      { declval&lt;const T&amp;&gt;() == declval&lt;const T&amp;&gt;() }
          -&gt; std::same_as&lt;bool&gt;;
  };
  </code></pre>