Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

If a function declared with an exception-specification throws an exception of a type not included in the specification, the function unexpected() is called. The behaviour behavior of this function can be overridden within a project, but by default causes an exception of std::bad_exception to be thrown. Unless std::bad_exception is listed in the exception-specification, the terminate() function will be called, leading to implementation-defined termination of the program.

...

In this non-compliant code example, the second function claims to throw only exception1, but it may also throw exception2.

Code Block
bgColor#FFcccc
langcpp
class exception1 : public exception {};
class exception2 : public exception {};

void foo() {
  throw exception2; // ok...since foo() promises nothing wrt exceptions
}

void bar() throw (exception1) {
  foo();    // bad, since foo() can throw exception2
}

...

A simple compliant solution is to catch any exceptions thrown by foo{}

Code Block
bgColor#ccccff
langcpp
void bar() throw (exception1) {
  try {
    foo();
  } catch (...) {
    // handle error, without re-throwing it
  }
}

...