std :: make_array使用公共类型.但是,我的主要问题是它允许代码编译,否则将无法编译:
template <typename T>
void foo(T a, T b)
{
}
int main()
{
auto arr = std::experimental::make_array(1, 3.0); // Compiles
foo(1, 3.0); // a and b types must match
std::array<int, 2> arr2{1, 3.0}; // narrowing conversion
}
Run Code Online (Sandbox Code Playgroud)
这不一定是坏事.但我发现它不一致.请注意,由于模板参数推导的工作方式,std::make_array<int>实际上禁用了推导(因为您明确指定了类型),因此无法解决问题.
在这里使用普通类型的理由是什么?