From 7c4d9364a25a1c2be8111221db08d4b3e691a6e5 Mon Sep 17 00:00:00 2001 From: lethosor Date: Sun, 28 May 2023 02:51:06 -0400 Subject: [PATCH] Make allocator_fn compile for non-copy-assignable types like std::mutex --- library/include/DataDefs.h | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/library/include/DataDefs.h b/library/include/DataDefs.h index 174156e76..7d840a9ad 100644 --- a/library/include/DataDefs.h +++ b/library/include/DataDefs.h @@ -497,11 +497,25 @@ namespace df using DFHack::DfLinkedList; using DFHack::DfOtherVectors; + template + typename std::enable_if< + std::is_copy_assignable::value + >::type allocator_try_assign(void *out, const void *in) { + *(T*)out = *(const T*)in; + } + + template + typename std::enable_if< + !std::is_copy_assignable::value + >::type allocator_try_assign(void *out, const void *in) { + // assignment is not possible; do nothing + } + #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdelete-non-virtual-dtor" template void *allocator_fn(void *out, const void *in) { - if (out) { *(T*)out = *(const T*)in; return out; } + if (out) { allocator_try_assign(out, in); return out; } else if (in) { delete (T*)in; return (T*)in; } else return new T(); }