为什么在创建内置数组的模板函数中不允许使用 auto?

Why auto is not allowed in template function for creating a built-in array?

下面这段代码无法编译:

template<typename... Ts>
void CreateArr(const Ts&... args)
{
    auto arr[sizeof...(args) + 1]{ args... };
}

int main()
{
    CreateArr(1, 2, 3);
}

由于以下错误:

我的问题是:

Why cannot I use auto to define the type of the array?

出于同样的原因,以下操作无效/不允许!

auto ele[]{ 1, 2, 3 };

更多阅读:Why can't I create an array of automatic variables?


How to define it properly to work with the template?

使用std::common_type_t指定类型

#include <type_traits> //  std::common_type_t

template<typename... Ts>
void CreateArr(const Ts&... args) 
{
    std::common_type_t<Ts...> arr[sizeof...(args)]{ args... };
   
    static_assert(std::is_array_v<int[sizeof...(args)]>, "is not array!");
}

(See a Live Demo)