Crear vectores n-dimensionales con tamaños dados

Entonces, lo que quiero es crear un vector multidimensional de un tipo dado donde la primera dimensión tendrá el tamaño del primer argumento de una llamada de función, etc., por ejemplo, si lo hago

std::size_t n = 5;
auto x = make_vector<int>(n + 1, n * 2, n * 3);

x debería ser una matriz 3D de 6x10x15 (que consiste en ceros, porque quiero construir por defecto en este momento)

He intentado esto:

template <typename T>
std::vector<T> make_vector(std::size_t size) {
    return std::vector<T>(size);
}

template <typename T, typename... Args>
auto make_vector(std::size_t first, Args... sizes) -> std::vector<decltype(make_vector<T>(sizes...))> {
    auto inner = make_vector<T>(sizes...);
    return std::vector<decltype(inner)>(first, inner);
}

Parece funcionar para 1 o 2 argumentos, pero falla para 3 argumentos con el siguiente error (clang ++)

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<int>(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 = <unsigned long, unsigned long>]: 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) -> std::vector<decltype(make_vector<T>(sizes...))> {
     ^                                                                     ~~~~~~~~~~~
/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<T> make_vector(std::size_t size) {

Si entiendo correctamente, el problema es que cuando el compilador intenta calcular el valor de retorno de make_vector, debe conocer el valor de retorno del vector con menos número de argumentos y no lo hace. ¿Cómo arreglo eso?

Respuestas a la pregunta(5)

Su respuesta a la pregunta