https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108993
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Jonathan Wakely from comment #3) > Derived is an aggregate since C++17. Correction, it's an aggregate *only* in C++17. In C++20 the rule changed again so the user-declared (but not user-provided) constructor makes it a non-aggregate.