title: How to use c++20 concepts to compile-time enforce match of number of args for given type
body: <p>I'm using policy-based design, and I have several policies implementation (that use same interface), but one of the policies needs a different number of args for construction.</p>
  <p>So i've used in my class variadic template arguments (<code>typename... InitArgs</code>)<br />
  and I forward them using <code>std::forward</code> to contructor of policy type.</p>
  <p>example:</p>
  <pre><code>class Policy1 : public PolicyBase
  {
      Policy1(int arg1, std::string arg2);
  }
  
  class Policy2 : public PolicyBase
  {
      Policy2(int arg1);
  }
  
  template&lt;typename T&gt;
  concept PolicyConept = std::is_base_of&lt;PolicyBase, T&gt;::value;
  
  template&lt;PolicyConept T = Policy1, typename... InitArgs&gt;
  class PolicyManager
  {
     public:
     PolicyManager(InitArgs... args) 
     {
         _policyState = std::make_unique&lt;T&gt;(std::forward&lt;InitArgs&gt;(args)...);
     }
  
  private:
      std::unique_ptr&lt;T&gt; _policyState;
  }
  
  int main()
  {
     auto policy1 = std::make_unique&lt;PolicyManager&lt;Policy1&gt;&gt;(1,&quot;2&quot;);
     auto policy2 = std::make_unique&lt;PolicyManager&lt;Policy2&gt;&gt;(1);
  
  }
  </code></pre>
  <p><strong>I'm looking for a way to use concepts (introduced in C++20), that can perform compile-time check, to ensure the number of arguments provide is enough to build from them the given type</strong>.</p>
  <p>so would expect the following code to fail at compile time:</p>
  <pre><code>int main()
      {
         auto policy1 = std::make_unique&lt;PolicyManager&lt;Policy1&gt;&gt;(1); // missing argument
      }
  </code></pre>
  <p>I was attempting to use the concept <code>std::constructible_from</code> to accomplish that,
  but I'm not sure how the syntax would apply for <code>args...</code>.</p>
  <p>Would appreciate the help</p>