title: Why can the type constraint `std::convertible_to` be used with only one template argument?
body: <p>I've scrolled and searched through <a href="https://eel.is/c++draft/dcl.spec.auto" rel="noreferrer">the standard</a> and <a href="https://en.cppreference.com/w/cpp/language/auto" rel="noreferrer">cppreference</a> for hours to no avail, would really appreciate if someone could explain this occurance for me:</p>
  <p>I am looking at the standard concept <a href="https://en.cppreference.com/w/cpp/concepts/convertible_to" rel="noreferrer"><code>std::convertibe_to</code></a>. Here's a simple example that I do understand</p>
  <pre class="lang-cpp prettyprint-override"><code>class A {};
  class B : public A {};
  
  std::convertible_to&lt;A, B&gt;; // false
  std::convertible_to&lt;B, A&gt;; // true
  </code></pre>
  <p>Works as expected.</p>
  <p>Now there is also another possible way to use it, that I don't quite understand</p>
  <pre><code>void foo(std::convertible_to&lt;A&gt; auto x) { /* ... */ }
  </code></pre>
  <p>, and this function can easily accept any type convertible to A. This is weird though, because the first template parameter (&quot;From&quot;) is essencially dropped, and deduced on function call. This following function would also work, and I'm fairly certain it's actually equivalent to the previous one</p>
  <pre><code>template&lt;typename T, std::convertible_to&lt;T&gt; S&gt;
  void foo(S x) { /* ... */ }
  </code></pre>
  <p>again the type of <code>x</code> is deduced when we call <code>foo</code>.</p>
  <p>This works, despite the template requiring two parameters. I tried also with <code>std::derived_from</code> and it seems to work. This form of specifying a concept with only one template parameter even appears in the standard itself, so there must be some piece of syntax that explains it.</p>
  <p>Notice that <a href="https://eel.is/c++draft/concept.convertible" rel="noreferrer">the only version</a> of <code>std::convertible_to</code> that exists is in fact one that takes two template parameters.</p>
  <p>Could anyone clarify why this works?</p>