例外について教えてください。とある関数が

void f() throw(std::bad_exception)
{
...
 throw int();
}

とあったとすると、int型は関数の例外指定に無いので、throwすると
代わりにbad_exceptionが投げられると本にあったのですが、これだと
throw int()の時点で強制終了されてしまいます。
throw std::bad_exception() とすると、外側の関数でbad_exceptionが
キャッチできるのですが・・・。ちなみにVC.NETです。
なぜ終了してしまうのでしょうか?