28 template<
typename =
void>
44 if (base->m_ref_count-- == 1) {
50 constexpr static auto make(Args&&... args) -> R
51 requires(
requires {
new (std::nothrow) T(util::forward<Args>(args)...); })
54 return new T(util::forward<Args>(args)...);
56 auto* result =
new (std::nothrow) T(util::forward<Args>(args)...);
57 if constexpr (concepts::FallibleAllocator<platform::DefaultAllocator>) {
67 usize m_ref_count { 1 };
72 template<
typename... Args>
74 requires(
requires { IntrusiveThreadUnsafeRefCount<T>::make(util::forward<Args>(args)...); })
76 return vocab::as_fallible(IntrusiveThreadUnsafeRefCount<T>::make(util::forward<Args>(args)...)) %
84template<detail::IntrusivePtrVal
id<RcTag> T>
89using vocab::IntrusiveThreadUnsafeRefCount;
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition intrusive_ptr.h:25
size_t usize
Definition integers.h:33
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
constexpr auto adopt_object
Definition intrusive_ptr.h:22
constexpr auto as_fallible
Definition as_fallible.h:26
constexpr auto try_infallible
Definition try_infallible.h:31
constexpr auto make_rc
Definition rc.h:85
Unexpected(E &&) -> Unexpected< meta::UnwrapRefDecay< E > >
constexpr auto retain_object
Definition intrusive_ptr.h:17
IntrusivePtr< T, RcTag > Rc
Definition rc.h:19
Definition zstring_parser.h:9
Definition in_place_type.h:5
constexpr friend void tag_invoke(types::Tag< intrusive_ptr_increment >, InPlaceType< RcTag >, T *pointer)
Definition rc.h:37
IntrusiveThreadUnsafeRefCount()=default
friend struct MakeRcFunction
Definition rc.h:25
constexpr friend void tag_invoke(types::Tag< intrusive_ptr_decrement >, InPlaceType< RcTag >, T *pointer)
Definition rc.h:42
constexpr auto rc_from_this()
Definition rc.h:29
constexpr auto operator()(Args &&... args) const
Definition rc.h:73