17
17
# error "Bitcoin cannot be compiled without assertions."
18
18
#endif
19
19
20
+ // Assumption: We assume a C++11 (ISO/IEC 14882:2011) compiler (minimum requirement).
21
+ // Example(s): We assume the presence of C++11 features everywhere :-)
22
+ // Note: MSVC does not report the expected __cplusplus value due to legacy
23
+ // reasons.
24
+ #if !defined(_MSC_VER)
25
+ // ISO Standard C++11 [cpp.predefined]p1:
26
+ // "The name __cplusplus is defined to the value 201103L when compiling a C++
27
+ // translation unit."
28
+ static_assert (__cplusplus >= 201103L , " C++11 standard assumed" );
29
+ #endif
30
+
20
31
// Assumption: We assume the floating-point types to fulfill the requirements of
21
32
// IEC 559 (IEEE 754) standard.
22
33
// Example(s): Floating-point division by zero in ConnectBlock, CreateTransaction
@@ -40,8 +51,13 @@ static_assert(sizeof(double) == 8, "64-bit double assumed");
40
51
static_assert (sizeof (short ) == 2, "16-bit short assumed");
41
52
static_assert (sizeof (int ) == 4, "32-bit int assumed");
42
53
54
+ // Assumption: We assume size_t to be 32-bit or 64-bit.
55
+ // Example(s): size_t assumed to be at least 32-bit in ecdsa_signature_parse_der_lax(...).
56
+ // size_t assumed to be 32-bit or 64-bit in MallocUsage(...).
57
+ static_assert (sizeof (size_t ) == 4 || sizeof(size_t ) == 8, "size_t assumed to be 32-bit or 64-bit");
58
+ static_assert (sizeof (size_t ) == sizeof(void *), "Sizes of size_t and void* assumed to be equal");
59
+
43
60
// Some important things we are NOT assuming (non-exhaustive list):
44
- // * We are NOT assuming a specific value for sizeof(std::size_t).
45
61
// * We are NOT assuming a specific value for std::endian::native.
46
62
// * We are NOT assuming a specific value for std::locale("").name().
47
63
// * We are NOT assuming a specific value for std::numeric_limits<char>::is_signed.
0 commit comments