https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88114
--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> --- The "=default" destructor function is generated (when it is generated) via: mark_vtable_entries -> mark_used -> synthesize_method While the {} destructor is generated via: cp_parser_late_parsing_for_member -> cp_parser_function_definition_after_declarator -> cp_parser_ctor_initializer_opt_and_function_body