The implementation ensures that functions having an exception specification should throw only exceptions that are listed in their exception specification. For example:
class X{};
class Y{};
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.