title: Clang error – Compiler bug or missing some detail?
body: <p>While experimenting a bit with variadic templates, initializer lists, etc. I accidentally stumbled over the following nonsense-code triggering a rather interesting error message.</p>
  
  <p>First, let's define a small class for testing with an overloaded <code>operator,()</code>:</p>
  
  <pre><code>class Dummy {
  public:
      Dummy() {}
      Dummy &amp;operator,(int) { return *this; }
  };
  </code></pre>
  
  <p>Now we're using this class in the following way:</p>
  
  <pre><code>int test1 = (Dummy{}, 0);
  </code></pre>
  
  <p>When compiling with <code>clang version 6.0.0 (tags/RELEASE_600/final 334239)</code> this triggers a very legitimate sounding error message (since the operator essentially strips the <code>0</code> from the back):</p>
  
  <blockquote>
    <p>error: no viable conversion from 'Dummy' to 'int'</p>
  </blockquote>
  
  <p>Now let's change this example a tiny bit:</p>
  
  <pre><code>int test2 { (Dummy{}, 0) };
  </code></pre>
  
  <p>For my understand, this should basically trigger the same message, because in the end we're trying to do the very same thing here. However, the error is different:</p>
  
  <blockquote>
    <p>error: no viable conversion from 'void' to 'int'</p>
  </blockquote>
  
  <p><strong>Big question:</strong> Is the <code>void</code> a bug here or is there some conversion or interpretation happening I'm simply missing?</p>
  
  <p><a href="https://godbolt.org/g/KGmttH" rel="noreferrer">Code snippet on Compiler Explorer</a></p>