title: Cryptic template template parameter error
body: <p>I'm trying to create a function that gets the keys from a <code>std::map</code> or an <code>std::unordered_map</code>. I could use a simple overload, but first I'd love to know what's wrong with this code.</p>
  
  <pre><code>template&lt;typename K, typename V, template&lt;typename, typename&gt; class TContainer&gt;  
  std::vector&lt;K&gt; getKeys(const TContainer&lt;K, V&gt;&amp; mMap)
  {
      std::vector&lt;K&gt; result;
      for(const auto&amp; itr(std::begin(mMap)); itr != std::end(mMap); ++itr) result.push_back(itr-&gt;first);
      return result;
  }
  </code></pre>
  
  <p>When calling it with an <code>std::unordered_map</code>, even specifying <em>all</em> template typenames manually, clang++ 3.4 says: </p>
  
  <blockquote>
    <p>template template argument has different template parameters than its corresponding template template parameter.</p>
  </blockquote>