title: Is it possible to expand non-variadic arguments in a variadic template function?
body: <p>It is probably easier to explain what I mean by an example. Imagine a following template:</p>
  
  
  
  <pre class="lang-cpp prettyprint-override"><code>template &lt;class... Args&gt;
  std::tuple&lt;Args...&gt; foo();
  </code></pre>
  
  <p>It can be invoked, for example, like this:</p>
  
  <pre class="lang-cpp prettyprint-override"><code>auto ret = foo&lt;int, bool&gt;();
  </code></pre>
  
  <p>But what if I want to pass additional arguments to the function, based on the number of variadic template arguments? For example, let's say I want to pass a character string literal for every Args:</p>
  
  <pre class="lang-cpp prettyprint-override"><code>auto ret = foo&lt;int, bool&gt;("a", "b");
  </code></pre>
  
  <p>The problem with this, is that it does not seem possible to expand non-variadic arguments, so the following obviously doesn't compile:</p>
  
  <pre class="lang-cpp prettyprint-override"><code>template &lt;class... Args&gt;
  std::tuple&lt;Args...&gt; foo(const char*... names);
  </code></pre>
  
  <p>Is there any sensible way to implement this?</p>