使用P0960()
“允许从带括号的值列表中初始化聚合”,您也可以使用s进行聚合 init 。
但是,此初始化允许缩小,而{}
s 不允许。
#include <vector>
#include <climits>
struct Foo
{
int x, y;
};
int main()
{
// auto p = new Foo{INT_MAX, UINT_MAX}; // still won't compile
auto q = new Foo(INT_MAX, UINT_MAX); // c++20 allows narrowing aggregates init
std::vector<Foo> v;
// v.emplace_back(Foo{INT_MAX, UINT_MAX}); // still won't compile
v.emplace_back(INT_MAX, UINT_MAX); // c++20 allows narrowing aggregates init
// in furtherly perfect forwardings
}
是否可以使用带括号的 C++20 聚合初始化来检测缩小转换?