Bitcoin Core
0.21.1
P2P Digital Currency
Main Page
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Modules
src
util
check.h
Go to the documentation of this file.
1
// Copyright (c) 2019 The Bitcoin Core developers
2
// Distributed under the MIT software license, see the accompanying
3
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5
#ifndef BITCOIN_UTIL_CHECK_H
6
#define BITCOIN_UTIL_CHECK_H
7
8
#if defined(HAVE_CONFIG_H)
9
#include <
config/bitcoin-config.h
>
10
#endif
11
12
#include <
tinyformat.h
>
13
14
#include <stdexcept>
15
16
class
NonFatalCheckError
:
public
std::runtime_error
17
{
18
using
std::runtime_error::runtime_error;
19
};
20
32
#define CHECK_NONFATAL(condition) \
33
do { \
34
if (!(condition)) { \
35
throw NonFatalCheckError( \
36
strprintf("%s:%d (%s)\n" \
37
"Internal bug detected: '%s'\n" \
38
"You may report this issue here: %s\n", \
39
__FILE__, __LINE__, __func__, \
40
(#condition), \
41
PACKAGE_BUGREPORT)); \
42
} \
43
} while (false)
44
45
#if defined(NDEBUG)
46
#error "Cannot compile without assertions!"
47
#endif
48
50
template
<
typename
T>
51
T
get_pure_r_value
(T&& val)
52
{
53
return
std::forward<T>(val);
54
}
55
57
#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); }()
58
59
#endif // BITCOIN_UTIL_CHECK_H
NonFatalCheckError
Definition:
check.h:16
bitcoin-config.h
tinyformat.h
get_pure_r_value
T get_pure_r_value(T &&val)
Helper for Assert().
Definition:
check.h:51
Generated on Fri Apr 30 2021 13:53:46 for Bitcoin Core by
1.8.8