void
delete_persistent_atomic(typename detail::pp_if_array<T>::type &ptr,
			 std::size_t N)
{
	/* we CAN'T call destructor */
	pmemobj_free(ptr.raw_ptr());
}
void
make_persistent_atomic(pool_base &pool,
		       typename detail::pp_if_array<T>::type &ptr,
		       std::size_t N)
{
	typedef typename detail::pp_array_type<T>::type I;

	auto ret = pmemobj_alloc(pool.get_handle(), ptr.raw_ptr(),
				 sizeof(I) * N, detail::type_num<I>(),
				 &detail::array_constructor<I>,
				 static_cast<void *>(&N));

	if (ret != 0)
		throw std::bad_alloc();
}