30 template<
typename =
void>
52 constexpr static auto make(Args&&... args) -> R
53 requires(
requires {
new (std::nothrow) T(util::forward<Args>(args)...); })
56 return new T(util::forward<Args>(args)...);
58 auto* result =
new (std::nothrow) T(util::forward<Args>(args)...);
59 if constexpr (concepts::FallibleAllocator<platform::DefaultAllocator>) {
69 sync::Atomic<usize> m_ref_count { 1 };
74 template<
typename... Args>
76 requires(
requires { IntrusiveRefCount<T>::make(util::forward<Args>(args)...); })
78 return vocab::as_fallible(IntrusiveRefCount<T>::make(util::forward<Args>(args)...)) % [](T* pointer) {
84template<detail::IntrusivePtrVal
id<ArcTag> T>
90using vocab::IntrusiveRefCount;
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition intrusive_ptr.h:25
@ Relaxed
Definition memory_order.h:7
@ AcquireRelease
Definition memory_order.h:11
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
constexpr auto adopt_object
Definition intrusive_ptr.h:22
constexpr auto make_arc
Definition arc.h:85
constexpr auto as_fallible
Definition as_fallible.h:26
constexpr auto try_infallible
Definition try_infallible.h:31
IntrusivePtr< T, ArcTag > Arc
Definition arc.h:21
Unexpected(E &&) -> Unexpected< meta::UnwrapRefDecay< E > >
constexpr auto retain_object
Definition intrusive_ptr.h:17
Definition zstring_parser.h:9
Definition in_place_type.h:5
constexpr friend void tag_invoke(types::Tag< intrusive_ptr_decrement >, InPlaceType< ArcTag >, T *pointer)
Definition arc.h:44
constexpr friend void tag_invoke(types::Tag< intrusive_ptr_increment >, InPlaceType< ArcTag >, T *pointer)
Definition arc.h:39
friend struct MakeArcFunction
Definition arc.h:27
IntrusiveRefCount()=default
constexpr auto arc_from_this()
Definition arc.h:31
constexpr auto operator()(Args &&... args) const
Definition arc.h:75