title: Using enable_if with struct specialization
body: <p>I am attempting to define a template that will will specify a storage type given another type T.  I'd like to use enable_if to catch all the arithmetic types.  Below is my attempt at this which complains the template is redeclared with 2 parameters.  I tried adding a 2nd dummy parm to the primary template but get a different error. How can this be done?</p>
  
  <pre><code>#include &lt;string&gt;
  #include &lt;type_traits&gt;
  template &lt;typename T&gt; struct storage_type; // want compile error if no match
  // template &lt;typename T, typename T2=void&gt; struct storage_type; // no joy
  template &lt;&gt; struct storage_type&lt;const char *&gt; { typedef std::string type; };
  template &lt;&gt; struct storage_type&lt;std::string&gt; { typedef std::string type; };
  template &lt;typename T, typename std::enable_if&lt;std::is_arithmetic&lt;T&gt;::value&gt;::type* = nullptr&gt; 
      struct storage_type { typedef double type; };
  
  // Use the storage_type template to allocate storage
  template&lt;typename T&gt;
  class MyStorage {
    public:
    typename storage_type&lt;T&gt;::type storage;
  };
  
  MyStorage&lt;std::string&gt; s;  // uses std::string
  MyStorage&lt;const char *&gt; s2; // uses std::string
  MyStorage&lt;float&gt; f;  // uses 'double'
  </code></pre>