How do I write a make_vector similar to std::make_tuple?
<p>Instead of creating vectors like this:  </p>

<pre><code>  std::vector&lt;int&gt;     v1{1,2,3};
  std::vector&lt;double&gt;  v2{1.1,2.2,3.3};
  std::vector&lt;Object&gt;  v3{Object{},Object{},Object{}};  
</code></pre>

<p>I'd like to create them with a generic function:  </p>

<pre><code>  auto v1 = make_vector(1,2,3);
  auto v2 = make_vector(1.1,2.2,3.3);
  auto v3 = make_vector(Object{},Object{},Object{}); 
</code></pre>

<p>Similar to <a href="http://en.cppreference.com/w/cpp/utility/pair/make_pair" rel="noreferrer">std::make_pair</a> and <a href="http://en.cppreference.com/w/cpp/utility/tuple/make_tuple" rel="noreferrer">std::make_tuple</a>, here was my attempt for a vector:  </p>

<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;utility&gt;

template &lt;typename... T&gt;
auto make_vector(T&amp;&amp;... args)
{
    using first_type = typename std::tuple_element&lt;0, std::tuple&lt;T...&gt;&gt;::type;
    return std::vector&lt;first_type&gt;{std::forward&lt;T&gt;(args)...};
}
</code></pre>

<p>It compiles, but when I attempt to use it:  </p>

<pre><code>auto vec = make_vector(1,2,3);  
</code></pre>

<hr>

<pre><code>m.cpp: In instantiation of ‘auto make_vector(T&amp;&amp; ...) [with T = {int, int, int}]’:
m.cpp:16:30:   required from here
m.cpp:8:78: error: invalid use of incomplete type ‘class std::tuple_element&lt;0ul, std::tuple&lt;int, int, int&gt; &gt;’
     using first_type = typename std::tuple_element&lt;0, std::tuple&lt;T...&gt;&gt;::type;
                                                                              ^
In file included from m.cpp:3:0:
/usr/include/c++/5/utility:85:11: note: declaration of ‘class std::tuple_element&lt;0ul, std::tuple&lt;int, int, int&gt; &gt;’
     class tuple_element;
           ^
m.cpp:9:60: error: invalid use of incomplete type ‘class std::tuple_element&lt;0ul, std::tuple&lt;int, int, int&gt; &gt;’
     return std::vector&lt;first_type&gt;{std::forward&lt;T&gt;(args)...};
                                                            ^
In file included from m.cpp:3:0:
/usr/include/c++/5/utility:85:11: note: declaration of ‘class std::tuple_element&lt;0ul, std::tuple&lt;int, int, int&gt; &gt;’
     class tuple_element;
           ^
m.cpp: In function ‘int main()’:
m.cpp:16:30: error: ‘void v1’ has incomplete type
   auto v1 = make_vector(1,2,3);  
</code></pre>

<p>How can I make a generic routine,<br>
that uses the first type of the first parameter to instantiate the vector?<br>
How can I forward the arguments as initializer values to the vector?</p>