It depends on what Herb means by "module". And the issues don't
only concern exceptions; they can concern anything using a C++
interface.
There is certainly no problem when exceptions cross translation
unit boundaries of sources compiled as part of the same
component. Between components, if they are all part of the same
application, and you ensure that they are all compiled using the
same compiler, with the same compiler options, it may be safe,
although there can be problems when crossing between dynamic
libraries, depending on how the libraries are loaded. (In
general, this is only a problem on Unix systems, where the
visibility of symbols in dynamically loaded components is
controlled by the options passed to the dynamic loader.) As
a general rule: arrange to have all of your application compiled
with the same compiler and the same compiler options, and you
should have no real problems within the application (although
you may have to ensure that all dynamic components are
explicitly loaded, at least under Unix). Between
"applications", where you are loading or being loaded by
"foreign" software, Herb's restrictions don't go far enough. In
practice, the interface where you cross between the applications
must be defined in C. And there may still be restrictions,
depending on how your code is loaded and what other dynamically
loaded components are being used.
Linking statically will remove the problems with regards to how
the library is loaded, but changes nothing else.