23 #include <type_traits>
30 template <
typename Creator,
typename Deleter>
33 PairedCalls(Creator&& creator, Deleter&& deleter) : deleter(std::move(deleter)), owner(
true) { creator(); }
39 Deleter
const deleter;
52 template <
typename Creator,
typename Deleter>
54 -> std::unique_ptr<typename std::remove_reference<decltype(*creator())>::type, Deleter>
56 return {creator(), deleter};
60 template <
typename Creator,
typename Deleter>
61 inline auto paired_calls(Creator&& creator, Deleter&& deleter)
62 ->
typename std::enable_if<
63 std::is_void<decltype(creator())>::value,
64 PairedCalls<Creator, Deleter>>::type
66 return {std::move(creator), std::move(deleter)};
76 template <
typename Owned,
typename Deleter>
78 -> std::unique_ptr<Owned, Deleter>
80 return {owned, deleter};