17 template<
typename T,
typename Deleter = std::default_delete<T>>
34 explicit ClonePtr(std::unique_ptr<element_type, deleter_type> p)
noexcept : value_{std::move(p)} {}
59 value_ = std::unique_ptr<element_type>{
rhs.value_->clone()};
75 template<
typename U,
typename E>
77 (not std::is_array_v<U>)
and
79 std::is_assignable_v<Deleter&, E&&>
82 value_ = std::move(
rhs.value_);
94 return value_.release();
104 value_.swap(
other.value_);
114 return value_.get_deleter();
119 return value_.get_deleter();
142 template<
typename T2,
typename D2>
145 return lhs.get() ==
rhs.get();
148 template<
typename CharT,
typename Traits>
151 return os << p.
get();
155 template<
typename,
typename>
friend class ClonePtr;
157 std::unique_ptr<T, Deleter> value_;
161 template<
typename T,
typename...
Args>
162 requires std::constructible_from<
T,
Args&&...>
169template<
typename T,
typename Deleter>
170struct std::hash<
osc::ClonePtr<T, Deleter>> final {
173 return std::hash(p.get());
Definition clone_ptr.h:18
pointer release() noexcept
Definition clone_ptr.h:92
friend std::basic_ostream< CharT, Traits > & operator<<(std::basic_ostream< CharT, Traits > &os, const ClonePtr &p)
Definition clone_ptr.h:149
void reset(pointer ptr=pointer()) noexcept
Definition clone_ptr.h:97
const Deleter & get_deleter() const noexcept
Definition clone_ptr.h:117
Deleter & get_deleter() noexcept
Definition clone_ptr.h:112
ClonePtr(pointer p) noexcept
Definition clone_ptr.h:31
pointer get() const noexcept
Definition clone_ptr.h:107
friend void swap(ClonePtr &lhs, ClonePtr &rhs) noexcept
Definition clone_ptr.h:137
std::add_lvalue_reference_t< T > operator*() const noexcept(noexcept(*std::declval< pointer >()))
Definition clone_ptr.h:127
constexpr ClonePtr(std::nullptr_t) noexcept
Definition clone_ptr.h:28
pointer operator->() const noexcept
Definition clone_ptr.h:132
T * pointer
Definition clone_ptr.h:20
ClonePtr & operator=(ClonePtr &&) noexcept=default
ClonePtr(std::unique_ptr< element_type, deleter_type > p) noexcept
Definition clone_ptr.h:34
ClonePtr(const ClonePtr &src)
Definition clone_ptr.h:37
constexpr ClonePtr() noexcept
Definition clone_ptr.h:25
T element_type
Definition clone_ptr.h:21
friend bool operator==(const ClonePtr &lhs, const ClonePtr< T2, D2 > &rhs)
Definition clone_ptr.h:143
ClonePtr(ClonePtr &&) noexcept=default
Deleter deleter_type
Definition clone_ptr.h:22
ClonePtr & operator=(std::nullptr_t) noexcept
Definition clone_ptr.h:86
void swap(ClonePtr &other) noexcept
Definition clone_ptr.h:102
~ClonePtr() noexcept=default
Definition custom_decoration_generator.h:5
constexpr U to(T &&value)
Definition conversion.h:56
ClonePtr< T > make_cloneable(Args &&... args)
Definition clone_ptr.h:163
and
Definition algorithms.h:158
size_t operator()(const osc::ClonePtr< T, Deleter > &p) const noexcept
Definition clone_ptr.h:171