title: Curiously recurring template pattern (CRTP) and derived constructor arguments
body: <p>I'm using curiously recurring template pattern for creating shared pointer in the following way (below). On Derived::create(...) Visual Studio IntelliSense shows than available arguments are (Args &amp;&amp;...args). How to pass Derived class constructor argument list to Base so that IntelliSense would show me that available arguments are (const std::string &amp;str, int i)?</p>
  
  <pre><code>#include &lt;memory&gt;
  #include &lt;string&gt;
  
  template&lt;typename T&gt;
  class Base
  {
  public:
      template&lt;typename... Args &gt;
      static std::shared_ptr&lt;T&gt; create(Args&amp;&amp;... args)
      {
          return std::make_shared&lt;T&gt;(std::forward&lt;Args&gt;(args)...);
      }
  };
  
  class Derived : public Base&lt;Derived&gt;
  {
  public:
      Derived(const std::string &amp;str, int i) {}
  };
  
  int main()
  {
      auto derived = Derived::create("text", 123);
  }
  </code></pre>