title: Attempt at mimicking the python print function using variadic templates not working
body: <p>I came across <em>variadic template</em>s while reading a book and thought it would be pretty cool to implement a python style <code>print</code> function.</p>
  <p>Here is the code.</p>
  <pre><code>#include &lt;iostream&gt;
  #include &lt;string&gt;
  
  #define None &quot; &quot;
  
  template&lt;typename T, typename... Tail&gt;
  void print(T head, Tail... tail, const char* end = &quot;\n&quot;)
  {
      std::cout &lt;&lt; head &lt;&lt; end;
      if constexpr (sizeof...(tail) &gt; 0)
      {
          print(tail..., end);
      }
  }
  
  int main()
  {
      // Error: no instance of function template &quot;print&quot; matches the argument list
      print(&quot;apple&quot;, 0, 0.0f, 'c', true);
  
      // Error: no instance of function template &quot;print&quot; matches the argument list
      print(&quot;apple&quot;, 0, 0.0f, 'c', true, None);
  }
  </code></pre>
  <p>Expected result from those two function calls:</p>
  <pre><code>First:    Second:
  apple     apple 0 0.0f 'c' 1
  0
  0.0f
  'c'
  1
  </code></pre>
  <p>Removing <code>const char* end = &quot;\n&quot;</code> from the function signature gets the code to compile, but I want that functionality of specifying the last parameter to state whether to print a newline.</p>
  <p>Is this possible at all?</p>