Simplify an exception handler
authorChad Parry <cparry@fb.com>
Mon, 23 Nov 2015 20:00:54 +0000 (12:00 -0800)
committerfacebook-github-bot-1 <folly-bot@fb.com>
Mon, 23 Nov 2015 20:20:29 +0000 (12:20 -0800)
Summary: It looks like there is no reason to catch a `std::exception` and then `dynamic_cast` to a derived exception. We can just catch the derived exception directly.

whatcouldgowrong4

Reviewed By: yfeldblum

Differential Revision: D2677284

fb-gh-sync-id: 0149e4d4aecc96257376d410f592620205441f66

folly/ExceptionWrapper.h

index 98ff9cb513de5f0efd73c4c44ac9912f01434947..bc8c9758d1a921e47c2343a29befcc11b078fb6b 100644 (file)
@@ -214,8 +214,8 @@ class exception_wrapper {
     } else if (eptr_) {
       try {
         std::rethrow_exception(eptr_);
-      } catch (std::exception& e) {
-        return dynamic_cast<const Ex*>(&e);
+      } catch (typename std::decay<Ex>::type&) {
+        return true;
       } catch (...) {
         // fall through
       }
@@ -323,11 +323,9 @@ private:
     } else if (that->eptr_) {
       try {
         std::rethrow_exception(that->eptr_);
-      } catch (std::exception& e) {
-        if (auto ex = dynamic_cast<Ex*>(&e)) {
-          f(*ex);
-          return true;
-        }
+      } catch (Ex& e) {
+        f(e);
+        return true;
       } catch (...) {
         // fall through
       }