std::array 的推导

The deduction guide for std::array

提问人:Vlad from Moscow 提问时间:3/22/2022 最后编辑:Vlad from Moscow 更新时间:3/22/2022 访问量:457

问:

在 C++ 标准的 C++ 17 和 C++ 20 工作草案中,类模板的演绎指南定义如下std::array

template<class T, class... U>
array(T, U...) -> array<T, 1 + sizeof...(U)>;

因此,例如,此声明

std::array a = { 1ll, 2llu };

应该编译,并且变量的推导类型是 。astd::array<long long, 2>

但是,编译器使用另一个推导指南来检查所有初始值设定项是否具有相同的类型。

是编译器的错误,还是在 C++ 17 和 C++ 20 标准中确实更改了演绎指南?

C++ 17 C++ 20 STDRacle 演绎指南

评论


答:

12赞 Caleth 3/22/2022 #1

C++17 在演绎指南中有这一要求。

template<class T, class... U>
array(T, U...) -> array<T, 1 + sizeof...(U)>;

要求:是真的。否则,程序格式不正确。(is_­same_­v<T, U> && ...)

[array.cons#2]