Created on 2022-07-21.00:00:00 last changed 16 months ago
Proposed resolution (approved by CWG 2022-08-26):
Change in 9.4.2 [dcl.init.aggr] paragraph 1 as follows:
An aggregate is an array or a class (Clause 11 [class]) with
- no user-declared or inherited constructors (11.4.5 [class.ctor]),
- no private or protected direct non-static data members (11.8 [class.access]),
- no private or protected direct base classes (11.8.3 [class.access.base]), and
- no virtual functions (11.7.3 [class.virtual]) or virtual base classes (11.7.2 [class.mi]).
, andno virtual, private, or protected base classes (11.7.2 [class.mi]).
[Accepted as a DR at the November, 2022 meeting.]
The wording appears to prohibit aggregates from having indirect private base classes. That does not match existing practice and is an unnecessary restriction. For example:
#include <type_traits> struct B1 {}; struct B2 : private B1 {}; struct S : public B2 {}; void f() { static_assert(std::is_aggregate<S>::value); }
History | |||
---|---|---|---|
Date | User | Action | Args |
2023-07-16 13:00:43 | admin | set | status: open -> c++23 |
2023-07-16 13:00:43 | admin | set | status: drwp -> open |
2023-02-18 18:43:04 | admin | set | status: dr -> drwp |
2022-11-25 05:14:04 | admin | set | status: ready -> dr |
2022-08-26 21:45:07 | admin | set | status: open -> ready |
2022-08-21 08:22:34 | admin | set | messages: + msg6894 |
2022-07-21 00:00:00 | admin | create |