17 std::unique_ptr<T> inner;
22 explicit box_ptr(std::unique_ptr<T> p)
25 assert(inner !=
nullptr);
29 using pointer =
typename std::unique_ptr<T>::pointer;
31 inline typename std::add_lvalue_reference<T>::type operator*()
const noexcept
36 inline pointer operator->()
const noexcept
41 inline pointer get()
const noexcept
51 return box_ptr(std::move(p));
65 template<
typename Other>
67 requires std::convertible_to<typename box_ptr<Other>::pointer, pointer> &&(!std::is_array_v<Other>)
69 : inner(std::move(other.inner))
71 other.inner =
nullptr;
76 std::unique_ptr<T> take() &&
78 return std::move(inner);