From 95dea4020f4446d70be31ede34686d87b500e4c9 Mon Sep 17 00:00:00 2001
From: Antonio SJ Musumeci <trapexit@spawn.link>
Date: Sun, 4 Feb 2024 00:29:55 -0600
Subject: [PATCH] func_create_ff.cpp

---
 src/make_unique.hpp | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)
 create mode 100644 src/make_unique.hpp

diff --git a/src/make_unique.hpp b/src/make_unique.hpp
new file mode 100644
index 00000000..98260bca
--- /dev/null
+++ b/src/make_unique.hpp
@@ -0,0 +1,41 @@
+#include <cstddef>
+#include <memory>
+#include <type_traits>
+#include <utility>
+
+namespace std
+{
+  template<class T> struct _Unique_if
+  {
+    typedef unique_ptr<T> _Single_object;
+  };
+
+  template<class T> struct _Unique_if<T[]>
+  {
+    typedef unique_ptr<T[]> _Unknown_bound;
+  };
+
+  template<class T, size_t N> struct _Unique_if<T[N]>
+  {
+    typedef void _Known_bound;
+  };
+
+  template<class T, class... Args>
+  typename _Unique_if<T>::_Single_object
+  make_unique(Args&&... args)
+  {
+    return unique_ptr<T>(new T(std::forward<Args>(args)...));
+  }
+
+  template<class T>
+  typename _Unique_if<T>::_Unknown_bound
+  make_unique(size_t n)
+  {
+    typedef typename remove_extent<T>::type U;
+    return unique_ptr<T>(new U[n]());
+  }
+
+  template<class T, class... Args>
+  typename _Unique_if<T>::_Known_bound
+  make_unique(Args&&...) = delete;
+}