title: Why is the template specialization not chosen?
body: <p>I wrote the following code:</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;string&gt;
  #include &lt;type_traits&gt;
  
  template&lt;typename, typename = void&gt;
  struct is_incrementable : std::false_type {};
  
  template&lt;typename T&gt;
  struct is_incrementable&lt;T, decltype( ++std::declval&lt;T&amp;&gt;() )&gt; : std::true_type {};
  
  int main()
  {
      std::cout &lt;&lt; is_incrementable&lt;std::string&gt;::value &lt;&lt; std::endl;
      std::cout &lt;&lt; is_incrementable&lt;int&gt;::value &lt;&lt; std::endl;
  }
  </code></pre>
  
  <p>When I run it, I get <code>0 0</code>. But I expected <code>0 1</code>.</p>
  
  <p>Any ideas?</p>