This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 115e. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2024-11-11
[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); }
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]).