9 #ifndef __NODAMUSHI_BOX_HPP__ 10 #define __NODAMUSHI_BOX_HPP__ 12 # include <type_traits> 20 template<
typename T,
typename D = std::default_delete<T>>
23 T*
get() noexcept{
return ptr.get();}
24 const T*
get() const noexcept{
return ptr.get();}
26 typename std::add_lvalue_reference<typename std::add_const<T>::type>::type
operator*()
const{
return *ptr;}
27 typename std::add_lvalue_reference<T>::type
operator*() {
return *ptr;}
29 const T*
operator->() const noexcept{
return ptr.operator->();}
32 constexpr
box()noexcept
34 explicit box(T* p)noexcept
36 box(T* p,
const D& d1)noexcept
38 box(T* p, D&& d2)noexcept
39 :ptr(p,std::move(d2)){}
40 box(std::unique_ptr<T,D>&& u)noexcept
43 :ptr(std::move(u.ptr)){}
45 constexpr
box(std::nullptr_t n)noexcept
53 template <
class U,
class E>
64 T*
release()noexcept{
return ptr.release();}
65 void reset(T* p=
nullptr)noexcept{ptr.reset(p);}
66 template<
class U>
void reset(U)=
delete;
67 template<
typename T2,
typename D2>
68 void swap(std::unique_ptr<T2,D2>& x) noexcept{ptr.swap(x);}
69 template<
typename T2,
typename D2>
74 const D&
get_deleter() const noexcept{
return ptr.get_deleter();}
75 explicit operator bool() const noexcept{
return static_cast<bool>(ptr);}
78 std::unique_ptr<T,D> ptr;
83 template<
typename T,
typename D>
88 #endif // __NODAMUSHI_BOX_HPP__ const D & get_deleter() const noexcept
const T * get() const noexcept
const T * operator->() const noexcept
box & operator=(box &&u) noexcept
box(T *p, const D &d1) noexcept
constexpr box(std::nullptr_t n) noexcept
std::add_lvalue_reference< typename std::add_const< T >::type >::type operator *() const
const T & unboxing(const T &t)
box(T *p, D &&d2) noexcept
box(std::unique_ptr< T, D > &&u) noexcept
box(box< T, D > &&u) noexcept
void reset(T *p=nullptr) noexcept
box & operator=(std::nullptr_t p) noexcept
void swap(box< T2, D2 > &x) noexcept
D & get_deleter() noexcept
void swap(std::unique_ptr< T2, D2 > &x) noexcept
T * operator->() noexcept
box & operator=(box< U, E > &&u) noexcept