diff --git a/folly/Singleton-inl.h b/folly/Singleton-inl.h
index 33961f6b289fe00fe28baea09cc453dc91760d91..f06e003a5ecbca063763aa677ec4aff0c19b2b76 100644
--- a/folly/Singleton-inl.h
+++ b/folly/Singleton-inl.h
@@ -21,11 +21,14 @@ namespace detail {
 template <typename T>
 template <typename Tag, typename VaultTag>
 SingletonHolder<T>& SingletonHolder<T>::singleton() {
+  struct SingletonHolderImpl : SingletonHolder<T> {
+    SingletonHolderImpl()
+        : SingletonHolder<T>(
+              {typeid(T), typeid(Tag)},
+              *SingletonVault::singleton<VaultTag>()) {}
+  };
   /* library-local */ static auto entry =
-      createGlobal<SingletonHolder<T>, std::pair<Tag, VaultTag>>([]() {
-        return new SingletonHolder<T>(
-            {typeid(T), typeid(Tag)}, *SingletonVault::singleton<VaultTag>());
-      });
+      createGlobal<SingletonHolderImpl, void>();
   return *entry;
 }