From: Yedidya Feldblum Date: Wed, 26 Jul 2017 07:04:24 +0000 (-0700) Subject: Cut throwOnFail X-Git-Tag: v2017.07.31.00~29 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c815830fdb18d1b27bbd9bc883f16935759c0a64;p=folly.git Cut throwOnFail Summary: [Folly] Cut `throwOnFail`. It is not necessary, and `CHECK_THROW`, its reason for existing, can be implemented without it. It can also easily be a pessimization because there is no way to delay computation of the arguments to the exception ctor until after the check. So if there is, say, a computation using `sformat` to compute a string argument to the exception ctor, that will always be performed rather than being performed only should the check fail. Reviewed By: Orvid Differential Revision: D5478804 fbshipit-source-id: 71a125c126eae76c6e95ef1bd23ee883b1db39a5 --- diff --git a/folly/Exception.h b/folly/Exception.h index 28e07938..4a05535b 100644 --- a/folly/Exception.h +++ b/folly/Exception.h @@ -103,18 +103,15 @@ void checkFopenErrorExplicit(FILE* fp, int savedErrno, Args&&... args) { } } -template -void throwOnFail(V&& value, Args&&... args) { - if (!value) { - throw E(std::forward(args)...); - } -} - /** * If cond is not true, raise an exception of type E. E must have a ctor that * works with const char* (a description of the failure). */ -#define CHECK_THROW(cond, E) \ - ::folly::throwOnFail((cond), "Check failed: " #cond) +#define CHECK_THROW(cond, E) \ + do { \ + if (!(cond)) { \ + throw E("Check failed: " #cond); \ + } \ + } while (0) } // namespace folly