3 #if __cplusplus >= 201103L
14 template<
typename Instance,
15 typename Delete = void(*)(
typename std::remove_reference< Instance >::type & ) >
20 AutoDelete( Instance &&instance, Delete deleter ) :
21 AutoDelete( true, std::forward< Instance >( instance ), deleter )
24 AutoDelete(
bool runDeleter, Instance &&instance, Delete deleter ) :
25 value( std::forward< Instance >( instance ) ),
26 deleter( deleter ), runDeleter( runDeleter )
38 template<
typename Creator,
typename Delete >
39 auto autoDeleter( Creator creator, Delete deleter )
40 -> AutoDelete< typename std::result_of< Creator() >::type, Delete >
42 using Instance =
typename std::result_of< Creator() >::type;
43 return AutoDelete< Instance, Delete >(
true, creator(), deleter );
46 template<
typename Instance,
typename Delete >
47 auto refDeleteIf(
bool cond, Instance &ref, Delete deleter )
48 -> AutoDelete< Instance &, Delete >
50 return AutoDelete< Instance &, Delete >( cond, ref, deleter );
53 template<
typename Instance,
typename Delete >
54 auto refDeleter( Instance &ref, Delete deleter )
55 -> AutoDelete< Instance &, Delete >
57 return refDeleteIf(
true, ref, deleter );
64 #endif // WIBBLE_RAII_H