title: Use a templated variadic template parameter as specialized parameter
body: <p>My title might be wrong - if so, please do correct me, but at some point its hard for me to keep track of what meta thingy I'm actually trying to achieve ;)</p>
  
  <p>I have a class function template like this:</p>
  
  <pre><code>template&lt;template&lt;typename...&gt; class MapType&gt;
      Expression Expression::substitute(MapType&lt;std::string, Expression&gt; const&amp; identifierToExpressionMap) const {
          return SubstitutionVisitor&lt;MapType&gt;(identifierToExpressionMap).substitute(something);
      }
  </code></pre>
  
  <p>The important part is the MapType. The idea is to allow either <code>std::map</code> or <code>std::unordered_map</code> to be plugged in at will. With GCC and Clang, this works, but Visual Studio 2013 throws a compilation error:</p>
  
  <pre>error C2664: 'Expression Expression::substitute&lt;std::map>(const MapType &) const' :
  
  cannot convert argument 1 from 'std::map&lt;std::string,Expression,std::less&lt;_Kty>,std::allocator&lt;std::pair&lt;const _Kty,_Ty>>>' to 'const std::map &'
  
  1>          with
  1>          [
  1>              MapType=std::map
  1>          ]
  1>          and
  1>          [
  1>              _Kty=std::string
  1>  ,            _Ty=Expression
  1>          ]
  
  1>          Reason: cannot convert from 'std::map&lt;std::string,Expression,std::less&lt;_Kty>,std::allocator&lt;std::pair&lt;const _Kty,_Ty>>>' to 'const std::map'
  
  1>          with
  1>          [
  1>              _Kty=std::string
  1>  ,            _Ty=Expression
  1>          ]
  
  1>          No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
  </pre>
  
  <p>It seems that MSVC does not put <code>MapType</code> and <code>&lt;std::string, Expression&gt;</code> together as a type, am I missing something here?</p>
  
  <p>So my question is</p>
  
  <ol>
  <li>is this possible and just a bug in MSVC, or</li>
  <li>is there an easier way to do this. Please keep in mind that there are many other classes which receive the <code>MapType</code> parameter and instantiate their own version with different key/value Types.</li>
  </ol>