The moment you know you have to abort, go ahead and call std::terminate already to curtail any further damage.
If you know you can wind down safely, do that instead. Remember that stack-unwinding is not guaranteed when an exception is never caught, so catch and rethrow.
If you can safely report/log the error better than the system will do it on its own, go ahead.
But be really sure not to inadvertently make matters worse while doing so.
It's often too late to save data when you detect an irrecoverable error, though it depends on the specific error.
Anyway, if your program is written for fast recovery, just killing it might be the best way to end it even if it's just a normal shutdown.