title: How can I curry variadic template template parameters?
body: <p>Variadic template template parameters accept any template:</p>
  
  <pre><code>template&lt;typename T&gt;
  struct Test1 {
      using type = int;
  };
  
  template&lt;typename T, typename T1&gt;
  struct Test2 {
      using type = char*;
  };
  
  template&lt;template&lt;typename...S&gt; class BeCurry&gt;
  struct Currying {
  };
  
  using curry  = Currying&lt;Test1&gt;;
  using curry2 = Currying&lt;Test2&gt;;
  </code></pre>
  
  <p>I want Currying template template class.<br>
  It means: if the parameter accepts one template param as <code>Test1</code>, <code>curry::apply&lt;T&gt;::type get  Test1&lt;T&gt;::type</code>. If the paramter accepts two template params as <code>Test2</code>, <code>curry2::apply&lt;T0&gt;</code> is a 'Partial' template, <code>curry2::apply&lt;T0&gt;::apply&lt;T1&gt;::type get Test2&lt;T0,T1&gt;::type</code> </p>
  
  <p>Is this possible to implement? Because I can't query inner parameter num of template template parameters:</p>
  
  <pre><code>template&lt;template&lt;typename... S&gt; class BeCurry&gt;
  struct Currying {
      enum { value = sizeof...(S) }; // error!
  };
  </code></pre>