util: Add Assume() identity function

This commit is contained in:
MarcoFalke
2020-10-12 22:54:15 +02:00
parent fa861569dc
commit fac5efe730
3 changed files with 46 additions and 0 deletions

View File

@@ -56,4 +56,20 @@ T get_pure_r_value(T&& val)
/** Identity function. Abort if the value compares equal to zero */
#define Assert(val) ([&]() -> decltype(get_pure_r_value(val)) { auto&& check = (val); assert(#val && check); return std::forward<decltype(get_pure_r_value(val))>(check); }())
/**
* Assume is the identity function.
*
* - Should be used to run non-fatal checks. In debug builds it behaves like
* Assert()/assert() to notify developers and testers about non-fatal errors.
* In production it doesn't warn or log anything.
* - For fatal errors, use Assert().
* - For non-fatal errors in interactive sessions (e.g. RPC or command line
* interfaces), CHECK_NONFATAL() might be more appropriate.
*/
#ifdef ABORT_ON_FAILED_ASSUME
#define Assume(val) Assert(val)
#else
#define Assume(val) ((void)(val))
#endif
#endif // BITCOIN_UTIL_CHECK_H