title: Create n-dimensional vector with given sizes
body: <p>So, what I want is to create multidimensional vector of given type where the first dimension will have size of the first argument of a function call, etc, for example if I do</p>
  
  <pre><code>std::size_t n = 5;
  auto x = make_vector&lt;int&gt;(n + 1, n * 2, n * 3);
  </code></pre>
  
  <p><code>x</code> should be 6x10x15 3d array (consisting of zeroes, because I want to default construct right now)</p>
  
  <p>I have tried this:</p>
  
  <pre><code>template &lt;typename T&gt;
  std::vector&lt;T&gt; make_vector(std::size_t size) {
      return std::vector&lt;T&gt;(size);
  }
  
  template &lt;typename T, typename... Args&gt;
  auto make_vector(std::size_t first, Args... sizes) -&gt; std::vector&lt;decltype(make_vector&lt;T&gt;(sizes...))&gt; {
      auto inner = make_vector&lt;T&gt;(sizes...);
      return std::vector&lt;decltype(inner)&gt;(first, inner);
  }
  </code></pre>
  
  <p>It seems to work for 1 or 2 arguments, but fails for 3 arguments with following error(clang++)</p>
  
  <pre><code>In file included from /Users/riad/ClionProjects/for-jhelper/output/run.cpp:1:
  /Users/riad/ClionProjects/for-jhelper/tasks/TaskC.cpp:12:12: error: no matching function for call to 'make_vector'
                  auto x = make_vector&lt;int&gt;(n + 1, n * 2, n * 3);
                           ^~~~~~~~~~~~~~~~
  /Users/riad/ClionProjects/for-jhelper/tasks/../spcppl/make_vector.hpp:9:6: note: candidate template ignored: substitution failure [with T = int, Args = &lt;unsigned long, unsigned long&gt;]: call to function 'make_vector' that is neither visible in the template definition nor found by argument-dependent lookup
  auto make_vector(std::size_t first, Args... sizes) -&gt; std::vector&lt;decltype(make_vector&lt;T&gt;(sizes...))&gt; {
       ^                                                                     ~~~~~~~~~~~
  /Users/riad/ClionProjects/for-jhelper/tasks/../spcppl/make_vector.hpp:4:16: note: candidate function template not viable: requires single argument 'size', but 3 arguments were provided
  std::vector&lt;T&gt; make_vector(std::size_t size) {
  </code></pre>
  
  <p>If I understand correctly problem is that when compiler tries to calculate return value of make_vector it have to know the return value of vector with less number of arguments and fails to do so. How do I fix that? </p>