title: Template function overload for type containing a type
body: <p>I'm trying to do the following:</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;vector&gt;
  #include &lt;tuple&gt;
  #include &lt;list&gt;
  
  template &lt;typename T&gt;
  void f(T t) {
      std::cout &lt;&lt; "1" &lt;&lt; std::endl;
  }
  
  template &lt;typename T, typename V&gt;
  void f(T&lt;std::tuple&lt;V&gt;&gt; t) {
      std::cout &lt;&lt; "2" &lt;&lt; std::endl;
  }
  
  int main() {
      f(std::list&lt;double&gt;{}); // should use first template
      f(std::vector&lt;std::tuple&lt;int&gt;&gt;{}); // should use second template
  }
  </code></pre>
  
  <p>What is the simplest way to do this in C++14? I thought that I could sort of pattern match in this way but the compiler won't have it.</p>