title: How to call a function of a related (but different) C++ concept?
body: <p>I have a concept <code>concept_a</code> and a second concept <code>concept_ab</code> with more requirements, e.g.</p>
  
  <pre><code>    template&lt;typename T&gt; concept concept_a = ...;
  
      template&lt;typename T&gt; concept concept_b = ...;
  
      template&lt;typename T&gt; concept concept_ab = concept_a&lt;T&gt; &amp;&amp; concept_b&lt;T&gt;;
  </code></pre>
  
  <p>Now I have some function <code>f</code> for these concepts. In the function for the more strict concept I want to reuse the function for the less strict concept:</p>
  
  <pre><code>    int f(concept_a auto a) {return 1;}
      int f(concept_ab auto ab)
      {
         int n =f&lt;concept_a&gt; (ab);
         return n+10;
      }
  </code></pre>
  
  <p>This, however, does not work since <code>f&lt;concept_a&gt;</code> is syntactically not valid. Of course, I can solve this problem by adding another level of indirection, (i.e. add a function <code>f_concept_a</code> that is called by both <code>f</code>). My question is: is there is a direct way to call a function of a different (but related) concept? </p>