From da5b3e84c4f2311ebe6041c0f8e46ef407619ab9 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Mon, 11 Nov 2024 20:49:40 +0100 Subject: [PATCH] Force 'lazy' static assert evaluation This fixes #26 --- src/emulator/serialization.hpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/emulator/serialization.hpp b/src/emulator/serialization.hpp index f4938df4..dbbdae8a 100644 --- a/src/emulator/serialization.hpp +++ b/src/emulator/serialization.hpp @@ -123,6 +123,8 @@ namespace utils template void read(T& object) { + constexpr auto is_trivially_copyable = std::is_trivially_copyable_v; + if constexpr (Serializable) { object.deserialize(*this); @@ -145,7 +147,7 @@ namespace utils } else { - static_assert(std::false_type::value, "Key must be trivially copyable or implement serializable!"); + static_assert(!is_trivially_copyable, "Key must be trivially copyable or implement serializable!"); std::abort(); } } @@ -340,6 +342,8 @@ namespace utils template void write(const T& object) { + constexpr auto is_trivially_copyable = std::is_trivially_copyable_v; + if constexpr (Serializable) { object.serialize(*this); @@ -348,7 +352,7 @@ namespace utils { ::serialize(*this, object); } - else if constexpr (std::is_trivially_copyable_v) + else if constexpr (is_trivially_copyable) { union { @@ -362,7 +366,7 @@ namespace utils } else { - static_assert(std::false_type::value, "Key must be trivially copyable or implement serializable!"); + static_assert(!is_trivially_copyable, "Key must be trivially copyable or implement serializable!"); std::abort(); } }