diff --git a/exile.hpp b/exile.hpp index 0f83661..7cc86a9 100644 --- a/exile.hpp +++ b/exile.hpp @@ -119,7 +119,7 @@ static int do_clone(int (*clonefn)(void *), void *launcharg) } template -T exile_launch_trivial(struct exile_policy *policy, U fn, Args && ... args) +typename std::enable_if_t, 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,8 @@ T exile_launch_trivial(struct exile_policy *policy, U fn, Args && ... args) template -T exile_launch(struct exile_policy *policy, const std::function &serializer, const std::function &deserializer, U fn, Args && ... args) +typename std::enable_if_t && 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; char *sharedbuf = (char *) mmap(NULL, mapsize , PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0); diff --git a/test.cpp b/test.cpp index 1d037e4..1b14c44 100644 --- a/test.cpp +++ b/test.cpp @@ -35,7 +35,7 @@ int incrementer(int arg) int test_exile_launch_trivial() { int u = 22; - int result = exile_launch_trivial(exile_init_policy(), &incrementer, u); + int result = exile_launch(exile_init_policy(), &incrementer, u); assert(result == 23); return 0; }