aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorluigi1111 <luigi1111w@gmail.com>2024-12-23 10:42:18 -0500
committerluigi1111 <luigi1111w@gmail.com>2024-12-23 10:42:18 -0500
commit8def48e79e99cb7f87115f55054d47233ba4ad8d (patch)
treefff0b72e2262c1f0f519dadd1eee8662e12e10c5 /src
parent1ed12f9b004b4598213d641d72c5b7c34010e887 (diff)
parent8b29ae48859231fed62ea90c2782740b4e22d4b8 (diff)
downloadmonzero-core-8def48e79e99cb7f87115f55054d47233ba4ad8d.tar.gz
monzero-core-8def48e79e99cb7f87115f55054d47233ba4ad8d.tar.xz
monzero-core-8def48e79e99cb7f87115f55054d47233ba4ad8d.zip
Merge pull request #9512
8b29ae4 Relax static_asserts in src/lmdb (Lee Clagett)
Diffstat (limited to 'src')
-rw-r--r--src/lmdb/key_stream.h1
-rw-r--r--src/lmdb/table.h2
-rw-r--r--src/lmdb/util.h1
-rw-r--r--src/lmdb/value_stream.h4
4 files changed, 5 insertions, 3 deletions
diff --git a/src/lmdb/key_stream.h b/src/lmdb/key_stream.h
index 11fa284dd..74cb536e5 100644
--- a/src/lmdb/key_stream.h
+++ b/src/lmdb/key_stream.h
@@ -133,6 +133,7 @@ namespace lmdb
//! \pre `!is_end()` \return Current key
K get_key() const noexcept
{
+ static_assert(std::is_trivially_copyable<K>(), "key is not memcpy safe");
assert(!is_end());
K out;
std::memcpy(std::addressof(out), key.data(), sizeof(out));
diff --git a/src/lmdb/table.h b/src/lmdb/table.h
index 4ded4ba54..48b94bc66 100644
--- a/src/lmdb/table.h
+++ b/src/lmdb/table.h
@@ -55,7 +55,7 @@ namespace lmdb
static expect<F> get_value(MDB_val value) noexcept
{
static_assert(std::is_same<U, V>(), "bad MONERO_FIELD?");
- static_assert(std::is_pod<F>(), "F must be POD");
+ static_assert(std::is_trivially_copyable<F>(), "F must be memcpy safe");
static_assert(sizeof(F) + offset <= sizeof(U), "bad field type and/or offset");
if (value.mv_size != sizeof(U))
diff --git a/src/lmdb/util.h b/src/lmdb/util.h
index 392ff2039..038411417 100644
--- a/src/lmdb/util.h
+++ b/src/lmdb/util.h
@@ -111,6 +111,7 @@ namespace lmdb
template<typename T, std::size_t offset = 0>
inline int less(MDB_val const* left, MDB_val const* right) noexcept
{
+ static_assert(std::is_trivially_copyable<T>(), "memcpy will not work");
if (!left || !right || left->mv_size < sizeof(T) + offset || right->mv_size < sizeof(T) + offset)
{
assert("invalid use of custom comparison" == 0);
diff --git a/src/lmdb/value_stream.h b/src/lmdb/value_stream.h
index bd2814ef4..2475ec191 100644
--- a/src/lmdb/value_stream.h
+++ b/src/lmdb/value_stream.h
@@ -162,8 +162,8 @@ namespace lmdb
G get_value() const noexcept
{
static_assert(std::is_same<U, T>(), "bad MONERO_FIELD usage?");
- static_assert(std::is_pod<U>(), "value type must be pod");
- static_assert(std::is_pod<G>(), "field type must be pod");
+ static_assert(std::is_trivially_copyable<U>(), "value type must be memcpy safe");
+ static_assert(std::is_trivially_copyable<G>(), "field type must be memcpy safe");
static_assert(sizeof(G) + uoffset <= sizeof(U), "bad field and/or offset");
assert(sizeof(G) + uoffset <= values.size());
assert(!is_end());