X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=folly%2FExceptionWrapper.cpp;h=f2fa016437558dc3be01c13a29e970f272b087af;hb=b22935cd23251a9958f73242cb1dc44dfc75c5f5;hp=97713ed307eeb35087519b307a9e5cce00478048;hpb=d2efd8104d4191f67140ecdbd5343ba05552f083;p=folly.git diff --git a/folly/ExceptionWrapper.cpp b/folly/ExceptionWrapper.cpp index 97713ed3..f2fa0164 100644 --- a/folly/ExceptionWrapper.cpp +++ b/folly/ExceptionWrapper.cpp @@ -58,6 +58,20 @@ std::exception const* get_std_exception_(std::exception_ptr eptr) noexcept { return nullptr; } } +} // namespace + +exception_wrapper exception_wrapper::from_exception_ptr( + std::exception_ptr const& ptr) noexcept { + if (!ptr) { + return exception_wrapper(); + } + try { + std::rethrow_exception(ptr); + } catch (std::exception& e) { + return exception_wrapper(std::current_exception(), e); + } catch (...) { + return exception_wrapper(std::current_exception()); + } } exception_wrapper::exception_wrapper(std::exception_ptr ptr) noexcept @@ -76,11 +90,11 @@ exception_wrapper::exception_wrapper(std::exception_ptr ptr) noexcept } } -[[noreturn]] void exception_wrapper::onNoExceptionError() { +[[noreturn]] void exception_wrapper::onNoExceptionError( + char const* const name) { std::ios_base::Init ioinit_; // ensure std::cerr is alive - std::cerr - << "Cannot use `throw_exception` with an empty folly::exception_wrapper" - << std::endl; + std::cerr << "Cannot use `" << name + << "` with an empty folly::exception_wrapper" << std::endl; std::terminate(); } @@ -88,4 +102,4 @@ fbstring exceptionStr(exception_wrapper const& ew) { return ew.what(); } -} // folly +} // namespace folly