title: concepts template argument deduction
body: <p>The concept below has two template parameters but only one is specified during usage. Is <code>T</code> always deduced and <code>InnerType</code> always the parameter that needs explicit specification?</p>
  <pre class="lang-cpp prettyprint-override"><code>#include &lt;iostream&gt;
  #include &lt;string&gt;
  #include &lt;span&gt;
  
  template &lt; class T, class InnerType &gt;
  concept RangeOf = requires(T&amp;&amp; t) 
  {
      requires std::same_as&lt;std::remove_cvref_t&lt;decltype(*std::ranges::begin(t))&gt;, InnerType &gt;;
      std::ranges::end(t);
  };
  
  void print(const RangeOf&lt;char&gt; auto&amp; seq) {
      std::cout &lt;&lt; &quot;char seq: &quot; &lt;&lt; std::string_view(seq.data(), seq.size()) &lt;&lt; std::endl;
  }
  
  int main() {    
      auto a_view = std::string_view(&quot;hello&quot;);
      print(a_view);
  }
  </code></pre>