namespace folly {
namespace detail {
template <typename T>
template <typename Tag, typename VaultTag>
struct SingletonHolder<T>::Impl : SingletonHolder<T> { … };
template <typename T>
template <typename Tag, typename VaultTag>
inline SingletonHolder<T>& SingletonHolder<T>::singleton() { … }
[[noreturn]] void singletonWarnDoubleRegistrationAndAbort(
const TypeDescriptor& type);
template <typename T>
void SingletonHolder<T>::registerSingleton(CreateFunc c, TeardownFunc t) { … }
template <typename T>
void SingletonHolder<T>::registerSingletonMock(CreateFunc c, TeardownFunc t) { … }
template <typename T>
T* SingletonHolder<T>::get() { … }
template <typename T>
std::weak_ptr<T> SingletonHolder<T>::get_weak() { … }
template <typename T>
std::shared_ptr<T> SingletonHolder<T>::try_get() { … }
template <typename T>
folly::ReadMostlySharedPtr<T> SingletonHolder<T>::try_get_fast() { … }
template <typename T>
template <typename Func>
invoke_result_t<Func, T*> detail::SingletonHolder<T>::apply(Func f) { … }
template <typename T>
void SingletonHolder<T>::vivify() { … }
template <typename T>
bool SingletonHolder<T>::hasLiveInstance() { … }
template <typename T>
void SingletonHolder<T>::preDestroyInstance(
ReadMostlyMainPtrDeleter<>& deleter) { … }
template <typename T>
void SingletonHolder<T>::destroyInstance() { … }
template <typename T>
void SingletonHolder<T>::inChildAfterFork() { … }
template <typename T>
SingletonHolder<T>::SingletonHolder(
TypeDescriptor typeDesc, SingletonVault& vault) noexcept
: … { … }
template <typename T>
bool SingletonHolder<T>::creationStarted() { … }
template <typename T>
void SingletonHolder<T>::createInstance() { … }
}
}