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.