use boost_throw_exception