title: Fold expression with comma operator and variadic template parameter pack
body: <pre><code>#include&lt;iostream&gt;
  using namespace std;
  
  template&lt;typename ...Args&gt;
  void output_argus(Args&amp;&amp;... args) 
  {
      ((cout &lt;&lt; args &lt;&lt; '\n'), ...);    // #1
      (... , (cout &lt;&lt; args &lt;&lt; '\n'));   // #2
  }
  
  
  int main()
  {
      output_argus(1, "test", 5.6f);
  }
  </code></pre>
  
  <p>Based on c++ operator <a href="https://en.cppreference.com/w/cpp/language/operator_precedence" rel="noreferrer">doc</a>, <code>','</code> is a <strong>left to right operator</strong>. It is meaning <code>a, b, c, d</code> meaning <code>(((a, b), c),d)</code> not <code>(a, (b, (c, d)))</code>. This is important if a, b, c, d are statements.</p>
  
  <p>However, based on fold expression <a href="https://en.cppreference.com/w/cpp/language/fold" rel="noreferrer">doc</a>, for <code>','</code> which should use <strong>unary left fold</strong>. </p>
  
  <p>My question why both statements in my code are working? Shouldn't only #2 work?
  And also how to understand <code>...</code> and <code>args</code>. and nested fold expression?</p>