https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102199
--- Comment #3 from Eyal Rozenberg <eyalroz1 at gmx dot com> --- Andrew: What you're saying would be plausible if g++ would find the structure to be incomplete. It does not. The completeness check passes; and it is why adding the explicit default ctor makes the asserting pass - despite your rationale applying to that case just as well.