title: Why c++ don't infer template argument T for simple nested types variables?
body: <p>In this piece of code:</p>
  <pre><code>#include &lt;iostream&gt;
  #include &lt;vector&gt;
  #include &lt;utility&gt;
  
  template &lt;typename T&gt;
  using Separation = std::pair&lt;std::vector&lt;T&gt;, std::vector&lt;T&gt;&gt;;
  
  int main()
  {
      std::vector&lt;int&gt; vector1 = {1};
  
      Separation s1(vector1, vector1);
  
      std::cout &lt;&lt; s1.first[0];
  
      return 0;
  }
  
  </code></pre>
  <p>The g++ compiler says: <code>error: missing template arguments before ‘(’ token</code></p>
  <p>That can be fixed just by adding the template parameter to <code>Separation</code>. But, if v1 is a vector of integer, shouldn't the compiler be able to understand that T should be generic that comes from the vector??</p>