> So I should be more precise. If there is throwable code in a destructor, it needs to be handled in the destructor.

That is fine.  But there is really no other place to call the last-opportunity flush.  The destructor is the last opportunity.