Counterpoint to the C++ fragment in "Error handling" section:
void foo()
{
Matrix *a = new Matrix(1000, 1000);
Matrix *b = new Matrix(1000, 1000);
delete b;
delete a;
}
Pretending exceptions solve error handling gets you a big fat zero. Look at boost: despite being written by C++ experts and held up as an excellent library (which it is!), it contains exception-unsafe portions. Why? Total exception safety is just as hard as the original error handling problem.