title: clang: candidate template ignored: substitution failure: typedef 'type' cannot be referenced with a class specifier
body: <p>In contrast to GCC 5, Clang 6 complains about the following error: </p>
  
  <blockquote>
    <p>candidate template ignored: substitution failure [with U = char, Us = ]: typedef 'type' cannot be referenced with a class specifier
    Tuple(U&amp;&amp; u, Us&amp;&amp;... rest) : m_element(::std::forward(u)), m_rest(::std::forward(rest...)...)</p>
  </blockquote>
  
  <p>I use my own Tuple implementation with</p>
  
  <pre><code>//! Declaration of tuple typename with multiple elements
  template&lt;typename T, typename... Ts&gt;
  class Tuple&lt;T, Ts...&gt;
  {
  public:
      T m_element;
      Tuple&lt;Ts...&gt; m_rest;
  
      template&lt;typename U,
               typename... Us,
               typename = class ::std::enable_if&lt;!::std::is_base_of&lt;Tuple,typename ::std::decay&lt;U&gt;::type&gt;::value&gt;::type&gt;
      Tuple(U&amp;&amp; u, Us&amp;&amp;... rest) : m_element(::std::forward&lt;U&gt;(u)), m_rest(::std::forward&lt;Us&gt;(rest)...)
      {
      }
  };
  
  template&lt;typename... Ts&gt;
  Tuple&lt;typename ::std::decay&lt;Ts&gt;::type...&gt; make_tuple(Ts&amp;&amp;... elements)
  {
      return Tuple&lt;typename ::std::decay&lt;Ts&gt;::type...&gt;(::std::forward&lt;Ts&gt;(elements)...);
  }
  </code></pre>
  
  <p>What is clang doing differently than GCC? And how can I fix this?</p>
  
  <p>Thanks!</p>