From c815830fdb18d1b27bbd9bc883f16935759c0a64 Mon Sep 17 00:00:00 2001 From: Yedidya Feldblum Date: Wed, 26 Jul 2017 00:04:24 -0700 Subject: [PATCH] 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 --- folly/Exception.h | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) 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 -- 2.34.1