title: Apply function to all elements of parameter pack from a variadic function
body: <p>Consider the following (not working!) example:</p>
  
  <pre><code>#include &lt;iostream&gt;
  
  template &lt;typename type&gt; void print(const type &amp; item)
  {
      std :: cout &lt;&lt; item &lt;&lt; std :: endl;
  }
  
  template &lt;typename... types&gt; void printall(const types &amp; ... items)
  {
      print(items)...;
  }
  
  int main()
  {
      printall(1, 2, "hello");
  }
  </code></pre>
  
  <p>Here I have a function <code>print</code> that simply prints out its argument, and a variadic function <code>printall</code> that accepts a pack of arguments. Now, what I would like to do is to simply have <code>printall</code> apply <code>print</code> to each element of the pack <code>items</code>. How can I get that done?</p>
  
  <p><strong>Note</strong>: I am <em>not</em> asking how to print a pack of values. I am aware of the existence of fold expressions and I know I could just throw the whole <code>items</code> in <code>std::cout</code> using them. Here <code>print</code> is just an example, could be any function.</p>
  
  <p>How can I get that done? This sounds like something that should remarkably simple to do and yet I couldn't find any (reasonable) syntax to do it.</p>