As others have said - exceptions are definitely not for situations where you are signaling a bug. That's what contracts are for. Never mind we don't have them, but exceptions are definitely not for signaling bugs. std::logic_error should be deprecated and removed once contracts land (yes, I know it's not gonna happen, but one can dream).
From the contract violation handler, you will definitely be able to both gracefully exit (save the document and terminate, for instance), as well as get the current stack trace.
Exceptions don't give you anything that makes dealing with bugs easier. In other words, exceptions *are* for control flow - exceptional control flow. Not bugs.