title: use the TYPE from the tempate type argument list
body: <p>I would like to use the type information from a class template argument list.</p>
  
  <p>Working example with quick <em>workaround</em>:</p>
  
  <pre><code>struct NoParam {};
  template&lt; typename A = NoParam,
            typename B = NoParam,
            typename C = NoParam,
            typename D = NoParam,
            typename E = NoParam,
            typename F = NoParam &gt;
  struct TypeList
  {
    typedef A T1;
    typedef B T2;
    typedef C T3;
    typedef D T4;
    typedef E T5;
    typedef F T6;
  };
  
  template&lt;typename... Types&gt;
  class Application
  {
     Application()
     {
        // the actual code will store the created instances in a tuple or map..
        std::make_unique&lt; TypeList&lt;Types...&gt;::T1 &gt; ();
        std::make_unique&lt; TypeList&lt;Types...&gt;::T2 &gt; ();
        std::make_unique&lt; TypeList&lt;Types...&gt;::T3 &gt; ();
        std::make_unique&lt; TypeList&lt;Types...&gt;::T4 &gt; ();
        std::make_unique&lt; TypeList&lt;Types...&gt;::T5 &gt; ();
        std::make_unique&lt; TypeList&lt;Types...&gt;::T6 &gt; ();
     }
  }
  </code></pre>
  
  <p>Is there any generic way...</p>
  
  <ul>
  <li>to iterate over Types and get the type info (for creating instances)</li>
  <li>no hard coded for only limited 6 types in the example </li>
  </ul>