Why can't I catch this exception in boost::thread?