|  16.2.2 Exceptions 
Exception handling is a language feature present in other modern
programming languages.  Ada and Java both have exception handling
mechanisms.  In essence, exception handling is a means of propagating a
classified error by unwinding the procedure call stack until the error
is caught by a higher procedure in the procedure call chain.  A
procedure indicates its willingness to handle a kind of error by
catching it:
 
 |  | 
 void foo ();
void
func ()
{
  try {
    foo ();
  }
  catch (...) {
    cerr << "foo failed!" << endl;
  }
}
 | 
 
Conversely, a procedure can throw an exception when something goes
wrong:
 
 |  | 
 typedef int io_error;
void
init ()
{
  int fd;
  fd = open ("/etc/passwd", O_RDONLY);
  if (fd < 0) {
    throw io_error(errno);
  }
}
 | 
 
C++ compilers tend to implement exception handling in full, or not at
all.  If any C++ compiler you may be concerned with does not implement
exception handling, you may wish to take the lowest common denominator
approach and eliminate such code from your project.
 
 |