5#ifndef INCLUDE_CPPGC_INTERNAL_FINALIZER_TRAIT_H_
6#define INCLUDE_CPPGC_INTERNAL_FINALIZER_TRAIT_H_
17template <
typename T,
typename =
void>
23 std::void_t<decltype(std::declval<T>().FinalizeGarbageCollectedObject())>>
27template <
typename T,
bool isFinalized>
35 static void Call(
void* obj) {
36 static_cast<T*
>(obj)->FinalizeGarbageCollectedObject();
42 static void Call(
void* obj) {
static_cast<T*
>(obj)->~
T(); }
46 std::conditional_t<HasFinalizeGarbageCollectedObject<T>::value,
Custom,
51 static_assert(
sizeof(
T),
"T must be fully defined");
52 FinalizeImpl::Call(obj);
59 static_assert(
sizeof(
T),
"T must be fully defined");
73 !std::is_trivially_destructible<typename std::remove_cv<T>::type>
::value;
void(*)(void *) FinalizationCallback
static void Finalize(void *obj)
static void Call(void *obj)
static void Call(void *obj)
std::conditional_t< HasFinalizeGarbageCollectedObject< T >::value, Custom, Destructor > FinalizeImpl
static void Finalize(void *obj)
static void Finalize(void *obj)
static constexpr bool kNonTrivialFinalizer
static constexpr FinalizationCallback kCallback
static constexpr bool HasFinalizer()
std::unique_ptr< ValueMirror > value