The implementation ensures that functions having an exception specification should throw only exceptions that are listed in their exception specification. For example:
void f() throw X
throw Y(); // violation of exception specification
By default, an attempt to throw an exception of a type that is not listed in the exception specification causes the std::unexpected() function to be called. std::unexpected() in turn calls terminate(), which terminates the program.