Vla*_*cow 6
C++ 标准中对聚合概念的定义都没有提到析构函数。
例如,C++ 20 (9.4.2 Aggregates) 中聚合的定义听起来如下
1 聚合是一个数组或一个类(第 11 条)
(1.1) — 没有用户声明或继承的构造函数 (11.4.5),
(1.2) — 没有私有或受保护的直接非静态数据成员 (11.9),
(1.3) — 没有虚函数 (11.7.3),和
(1.4) — 没有虚拟、私有或受保护的基类 (11.7.2)。
如果在 MS VS 2019 中执行此语句
std::cout << std::is_aggregate_v<B> << '\n';
那么输出将是1
.
另一方面,默认构造函数定义为已删除(C++ 20 标准,11.4.5.2 默认构造函数),如果
(2.8) — 任何可能构造的子对象都具有带有析构函数的类型,该析构函数已从默认的默认构造函数中删除或不可访问。
但是在提供的示例中没有这样的子对象。
所以它似乎是 MS VS 2019 的编译器错误。
更多推荐
初始化,是否会,函数
发布评论