title: Template specialisation with enable_if and is_arithmetic for a class
body: <p>I am trying to implement a Expression class with 2 specialisation for arithmetic types. This is the default class:</p>
  
  <pre><code>template&lt;typename Left, typename Op, typename Right, typename std::enable_if&lt;!std::is_arithmetic&lt;Left&gt;::value, Left&gt;::type* = nullptr&gt;
  class Expression { /* ... */ }
  </code></pre>
  
  <p>And those are the two specialisations:</p>
  
  <pre><code>template&lt;typename Left, typename Op, typename Right, typename std::enable_if&lt;std::is_arithmetic&lt;Left&gt;::value, Left&gt;::type* = nullptr&gt;
  class Expression { /* ... */ };
  
  template&lt;typename Left, typename Op, typename Right, typename std::enable_if&lt;std::is_arithmetic&lt;Right&gt;::value, Right&gt;::type* = nullptr&gt;
  class Expression { /* ... */ };
  </code></pre>
  
  <p>If I now compile my code I get this error: </p>
  
  <blockquote>
    <p>Error C3855   'Expression': template parameter '__formal' is incompatible with the declaration    Vector</p>
  </blockquote>
  
  <p>How can I solve my problem with templates and specialisation or dummy types as I used them.</p>