title: Variadic deduction guide not taken by g++, taken by clang++ - who is correct?
body: <p>Consider the following code:</p>
  
  <pre><code>template &lt;typename... Types&gt;
  struct list
  {
      template &lt;typename... Args&gt;
      list(Args...) 
      {
          static_assert(sizeof...(Types) &gt; 0);
      }
  };
  
  template &lt;typename... Args&gt;
  list(Args...) -&gt; list&lt;Args...&gt;;
  
  int main()
  {
      list l{0, 0.1, 'a'};
  }
  </code></pre>
  
  <p>I would expect <code>decltype(l)</code> to be <code>list&lt;int, double, char&gt;</code>. Unfortunately, <em>g++ 7.2</em> and <em>g++ trunk</em> fail the static assertion. <em>clang++ 5.0.0</em> and <em>clang++ trunk</em> compile and work as expected.</p>
  
  <p><a href="https://godbolt.org/g/XScFjS" rel="noreferrer"><strong>godbolt.org conformance view</strong></a></p>
  
  <p>Is this a <em>g++</em> bug? Or Is there a reason why the <em>deduction guide</em> should not be followed here?</p>
  
  <hr>
  
  <p>Adding a SFINAE constraint on the constructor seems to provide the desired behavior:</p>
  
  <pre><code>template &lt;typename... Args, 
            typename = std::enable_if_t&lt;sizeof...(Args) == sizeof...(Types)&gt;&gt;
  list(Args...) 
  {
      static_assert(sizeof...(Types) &gt; 0);
  }
  </code></pre>
  
  <p><a href="https://godbolt.org/g/Kk5fJH" rel="noreferrer"><strong>godbolt.org conformance view</strong></a></p>