38 #ifndef LIBPMEMOBJ_DESTROYER_HPP 39 #define LIBPMEMOBJ_DESTROYER_HPP 64 struct if_not_array<T[]>;
69 template <
typename T,
size_t N>
70 struct if_not_array<T[N]>;
82 struct if_size_array<T[]>;
87 template <
typename T,
size_t N>
88 struct if_size_array<T[N]> {
95 template <
typename T,
typename... Args>
97 create(
typename if_not_array<T>::type *ptr, Args &&... args)
99 new (
static_cast<void *
>(ptr)) T(std::forward<Args>(args)...);
105 template <
typename T,
typename... Args>
107 create(
typename if_size_array<T>::type *ptr, Args &&... args)
109 typedef typename detail::pp_array_type<T>::type I;
110 enum { N = pp_array_elems<T>::elems };
112 for (std::size_t i = 0; i < N; ++i)
113 create<I>(&(*ptr)[i], std::forward<Args>(args)...);
119 template <
typename T,
120 typename =
typename std::enable_if<!std::is_pod<T>::value>::type>
122 destroy(
typename if_not_array<T>::type &arg)
130 template <
typename T,
typename dummy = void,
131 typename =
typename std::enable_if<std::is_pod<T>::value>::type>
133 destroy(
typename if_not_array<T>::type &arg)
140 template <
typename T>
142 destroy(
typename if_size_array<T>::type &arg)
144 typedef typename detail::pp_array_type<T>::type I;
145 enum { N = pp_array_elems<T>::elems };
147 for (std::size_t i = 0; i < N; ++i)
148 destroy<I>(arg[N - 1 - i]);
Definition: allocator.hpp:48