I take the stance it's a bit like a calling convention, we agree on a convention and stick to it. Incurring the checking penalty every time is extreme so we don't.
Constantly checking is really bad..... yet we sort of have to. Consider a stack that checks it has something on it before popping. Should we check every time? Return nullptr (or some smart ptr that == it?) exception... it's really nasty.
It's temping to say "in any event (return null, exception, ect) /some/ caller if not the immediate is going to have to deal with it, so why not check it makes sense to call (as best as we can) first?"
Having seen no way to unify these opposing views (or even decide if "interface to users demand checking" applies to libraries) in my spare time I've been working on something "transactional" instead.
In this model every map key, list activity, state change ect ect either happens in full, or is rolled back, and let me tell you it's a fucking dream come true. In C++ an exception going past will free resources but not undo stuff, in this an exception going past completely undoes (or more correctly, never applies) whatever "happened".
The only caveat is things like "drill hole" these can't be undone, or "send email" - these are queued to happen on success of the ENTIRE thing (you know like how SQL transactions nest, commit is right at the end but nested ones form checkpoints - it's just like that) - and the user has to know about failure and to retry there.
I really love it, not to brag about how awesome I am but you literally don't have to pretend to care.
What's the catch? Written in PHP, but it works hand-in-glove with MySQL transactions, you can still sort of subvert it, but it's very hard
You'd need a managed environment for such a thing but honestly it's been a great experiment.
Don't confuse this with transactional memory semantics from the TSX extensions and that, but it has worked. I've been debating releasing it because it lets me be so lazy and build stuff so quickly, if it doesn't work, bail, no harm done. It's also surprisingly quick.
But also PHP...