common/util/cpp/Destructible.h (22 lines of code) (raw):

// Copyright (c) Facebook, Inc. and its affiliates. #pragma once namespace { template <typename T> void destructImpl(T* p) noexcept { if (p != nullptr) { p->~T(); } } template <typename T> void deleteImpl(T* p) noexcept { delete p; } } // namespace #ifndef HS_DEFINE_DESTRUCTIBLE #define HS_DEFINE_DESTRUCTIBLE(Name, Type...) \ extern "C" void destructible_destruct##Name(Type* p) noexcept { \ destructImpl(p); \ } \ extern "C" void destructible_delete##Name(Type* p) noexcept { \ deleteImpl(p); \ } #endif