24 template<
typename U,
typename...
Args>
41 if (ptr_.use_count() > 1) {
42 ptr_ = std::make_shared<T>(*ptr_);
65 return lhs.ptr_ ==
rhs.ptr_;
71 return lhs.ptr_ <=>
rhs.ptr_;
77 std::shared_ptr<T> ptr_;
80 template<
typename T,
typename...
Args>
88struct std::hash<
osc::CopyOnUpdPtr<T>> final {
91 return std::hash<std::shared_ptr<T>>{}(cow.ptr_);
Definition copy_on_upd_ptr.h:22
friend void swap(CopyOnUpdPtr &a, CopyOnUpdPtr &b) noexcept
Definition copy_on_upd_ptr.h:57
friend bool operator==(const CopyOnUpdPtr &lhs, const CopyOnUpdPtr< U > &rhs)
Definition copy_on_upd_ptr.h:63
element_type * upd()
Definition copy_on_upd_ptr.h:39
const T & operator*() const noexcept
Definition copy_on_upd_ptr.h:47
friend CopyOnUpdPtr< U > make_cow(Args &&...)
const T * operator->() const noexcept
Definition copy_on_upd_ptr.h:52
T * pointer
Definition copy_on_upd_ptr.h:31
friend auto operator<=>(const CopyOnUpdPtr &lhs, const CopyOnUpdPtr< U > &rhs)
Definition copy_on_upd_ptr.h:69
std::remove_extent_t< T > element_type
Definition copy_on_upd_ptr.h:32
const element_type * get() const noexcept
Definition copy_on_upd_ptr.h:34
Definition custom_decoration_generator.h:5
CopyOnUpdPtr< T > make_cow(Args &&... args)
Definition copy_on_upd_ptr.h:81
constexpr U to(T &&value)
Definition conversion.h:56
size_t operator()(const osc::CopyOnUpdPtr< T > &cow) const noexcept
Definition copy_on_upd_ptr.h:89