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,
66 return {std::move(creator), std::move(deleter)};
76 template <
typename Owned,
typename Deleter>
78 -> std::unique_ptr<Owned, Deleter>
80 return {owned, deleter};
All things Mir.
Definition: atomic_callback.h:25
~PairedCalls()
Definition: raii.h:35
auto deleter_for(Owned *owned, Deleter &&deleter) -> std::unique_ptr< Owned, Deleter >
Creates an RAII object from an owning pointer and deleter.
Definition: raii.h:77
PairedCalls(PairedCalls &&that)
Definition: raii.h:34
PairedCalls(Creator &&creator, Deleter &&deleter)
Definition: raii.h:33
auto paired_calls(Creator &&creator, Deleter &&deleter) -> std::unique_ptr< typename std::remove_reference< decltype(*creator())>::type, Deleter >
Creates an RAII object from a creator and deleter.
Definition: raii.h:53