I inherited a C++ project with a function defined like so:
void myDoc::parseDoc(string& path) throw(docError);
The parseDoc
function calls a library that throws libError
, and the main function that calls parseDoc
catches both docError
and libError
and logs them. parseDoc
doesn't throw any exceptions itself, but I would've expected the libError
s from the library to still get caught by main
. They don't - I just get a core dump with nothing useful on the stack.
I tried various changes to parseDoc
. Some of them get libError
passed up the chain. and some don't:
- catch
libError
and rethrow it - doesn't work - catch
libError
and copy it to adocError
and throw that - works - specify
throw(docError, libError)
and not catch anything - works - remove the
throw()
from the function definition and not catch anything - works
So my question is - does adding a throw(docError)
to this function definition specifically prevent other exceptions from being passed up the stack to the caller? If so, why would anyone want to do that? And if not specifying that a function throws exceptions just works the way I always thought exceptions were supposed to work, what's the point of the throw(e)
specification in the first place?