aggregate
An aggregate is one of the following types: * array type * class type (typically, struct or union), that has * no private or protected non-static data members * no user-provided, inherited, or explicit constructors * no user-declared or inherited constructors * no virtual, private, or protected (since C++17) base classes * no virtual member functions