Even if the compiler does support exception specifications you really don't want to use them.
The unexpected handler is global for a process, so there's absolutely nothing it can do that a top level exception handler can't. Nothing - not a dicky bird. In fact it's even worse than a top level exception handler because none of the destructors for objects currently in scope are guaranteed to be called. Even if you call exit() to bail out of your code destructors for automatic objects still aren't called. About the only sensible thing you can do is throw an exception that's (hopefully) of a type allowed by the specification and pray it reaches all the way to main or the thread function.
So you might as well write:
int main()
try
{
do_something();
}
catch( std::exception &e )
{
std::cout << "Something went horribly wrong: " << e.what() << std::endl;
}
catch( ... )
{
std::cout << "Something went horribly wrong, no idea what!" << std::endl;
}
as at least your code will clean up after itself and be in a deterministic state if you want to restart.