diff --git a/exile.hpp b/exile.hpp index 61f1eb3..a2463de 100644 --- a/exile.hpp +++ b/exile.hpp @@ -119,7 +119,7 @@ inline int do_clone(int (*clonefn)(void *), void *launcharg) } template -typename std::enable_if_t, T> exile_launch(struct exile_policy *policy, U fn, Args && ... args) +typename std::enable_if_t && !std::is_pointer_v, T> exile_launch(struct exile_policy *policy, U fn, Args && ... args) { size_t mapsize = sizeof(T); T * sharedbuf = (T *) mmap(NULL, mapsize , PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0); @@ -145,7 +145,7 @@ typename std::enable_if_t, T> exile_launch(struc template -typename std::enable_if_t && std::is_copy_constructible_v, T> +typename std::enable_if_t || (!std::is_trivially_copyable_v && std::is_copy_constructible_v), T> exile_launch(struct exile_policy *policy, const std::function &serializer, const std::function &deserializer, U fn, Args && ... args) { size_t mapsize = EXILE_MMAP_SIZE;