diff --git a/library/include/DataDefs.h b/library/include/DataDefs.h index 0109f0fd0..e03e9a0a8 100644 --- a/library/include/DataDefs.h +++ b/library/include/DataDefs.h @@ -499,23 +499,27 @@ namespace df template typename std::enable_if< - std::is_copy_assignable::value + std::is_copy_assignable::value, + void* >::type allocator_try_assign(void *out, const void *in) { *(T*)out = *(const T*)in; + return out; } template typename std::enable_if< - !std::is_copy_assignable::value + !std::is_copy_assignable::value, + void* >::type allocator_try_assign(void *out, const void *in) { // assignment is not possible; do nothing + return NULL; } #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdelete-non-virtual-dtor" template void *allocator_fn(void *out, const void *in) { - if (out) { allocator_try_assign(out, in); return out; } + if (out) { return allocator_try_assign(out, in); } else if (in) { delete (T*)in; return (T*)in; } else return new T(); }