title: template overloading and SFINAE working only with functions but not classes
body: <p>can someone explain why the compiler accepts only this code</p>
  
  <pre><code>template&lt;typename L, size_t offset, typename enable_if&lt; (offset&lt;sizeof(L)), int &gt;::type =0&gt;
  void a_function(){}
  
  template&lt;typename L, size_t offset, typename enable_if&lt; (offset==sizeof(L)), int &gt;::type =0&gt;
  void a_function(){}
  </code></pre>
  
  <p>but not this:</p>
  
  <pre><code>template&lt;typename L, size_t offset, typename enable_if&lt; (offset&lt;sizeof(L)), int &gt;::type =0&gt;
  class a_class{};
  
  template&lt;typename L, size_t offset, typename enable_if&lt; (offset==sizeof(L)), int &gt;::type =0&gt;
  class a_class{};
  </code></pre>
  
  <p>The compiler sees the second class template as a redefinition of the first.</p>