title: Template meta programming result changed between GCC-4.9.3 and GCC-5.1
body: <p>I have a simple test program here which outputs a different result when compiling on <code>gcc-4.9.3</code> and <code>gcc-5.1</code></p>
  
  <pre><code>#include &lt;iostream&gt;
  
  template&lt; class... &gt;
  using void_t = void;
  
  template&lt;class, class = void_t&lt;&gt;&gt;
  struct has_member_type : std::false_type
  { };
  
  template&lt;class T&gt;
  struct has_member_type&lt;T, void_t&lt;typename T::type&gt;&gt; : std::true_type
  { };
  
  int main()
  {
      std::cout &lt;&lt; has_member_type&lt;int&gt;::value &lt;&lt; '\n';
  
      return 0;
  }
  </code></pre>
  
  <p><strong><code>gcc-4.9.3</code> output:</strong></p>
  
  <blockquote>
  <pre><code>1
  </code></pre>
  </blockquote>
  
  <p><strong><code>gcc-5.1</code> output:</strong></p>
  
  <blockquote>
  <pre><code>0
  </code></pre>
  </blockquote>
  
  <p>I've been unable to find an online compiler which allows me to compile with two different compiler versions.</p>
  
  <p>However, I have found two separate online compilers which have difference compiler versions:</p>
  
  <ul>
  <li>Here is the <a href="http://rextester.com/OVEJ15498" rel="nofollow">code compiled with <code>gcc-4.9.3</code></a> (rextester)</li>
  <li>Here is the <a href="https://ideone.com/CZ6TkB" rel="nofollow">code compiled with <code>gcc-5.1</code></a> (ideone)</li>
  </ul>
  
  <p><strong>Question:</strong></p>
  
  <ul>
  <li>Why does <code>gcc-4.9.3</code> output <code>1</code> when there is clearly no member <code>int::type</code>?</li>
  </ul>