diff --git a/include/ceres/internal/manual_constructor.h b/include/ceres/internal/manual_constructor.h
index 5568bdb..60f147a 100644
--- a/include/ceres/internal/manual_constructor.h
+++ b/include/ceres/internal/manual_constructor.h
@@ -41,6 +41,7 @@
 #define CERES_PUBLIC_INTERNAL_MANUAL_CONSTRUCTOR_H_
 
 #include <new>
+#include <utility>
 
 namespace ceres {
 namespace internal {
@@ -130,81 +131,9 @@
     return reinterpret_cast<void*>(space_);
   }
 
-  // You can pass up to four constructor arguments as arguments of Init().
-  inline void Init() {
-    new(space()) Type;
-  }
-
-  template <typename T1>
-  inline void Init(const T1& p1) {
-    new(space()) Type(p1);
-  }
-
-  template <typename T1, typename T2>
-  inline void Init(const T1& p1, const T2& p2) {
-    new(space()) Type(p1, p2);
-  }
-
-  template <typename T1, typename T2, typename T3>
-  inline void Init(const T1& p1, const T2& p2, const T3& p3) {
-    new(space()) Type(p1, p2, p3);
-  }
-
-  template <typename T1, typename T2, typename T3, typename T4>
-  inline void Init(const T1& p1, const T2& p2, const T3& p3, const T4& p4) {
-    new(space()) Type(p1, p2, p3, p4);
-  }
-
-  template <typename T1, typename T2, typename T3, typename T4, typename T5>
-  inline void Init(const T1& p1, const T2& p2, const T3& p3, const T4& p4,
-                   const T5& p5) {
-    new(space()) Type(p1, p2, p3, p4, p5);
-  }
-
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-            typename T6>
-  inline void Init(const T1& p1, const T2& p2, const T3& p3, const T4& p4,
-                   const T5& p5, const T6& p6) {
-    new(space()) Type(p1, p2, p3, p4, p5, p6);
-  }
-
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-            typename T6, typename T7>
-  inline void Init(const T1& p1, const T2& p2, const T3& p3, const T4& p4,
-                   const T5& p5, const T6& p6, const T7& p7) {
-    new(space()) Type(p1, p2, p3, p4, p5, p6, p7);
-  }
-
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-            typename T6, typename T7, typename T8>
-  inline void Init(const T1& p1, const T2& p2, const T3& p3, const T4& p4,
-                   const T5& p5, const T6& p6, const T7& p7, const T8& p8) {
-    new(space()) Type(p1, p2, p3, p4, p5, p6, p7, p8);
-  }
-
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-            typename T6, typename T7, typename T8, typename T9>
-  inline void Init(const T1& p1, const T2& p2, const T3& p3, const T4& p4,
-                   const T5& p5, const T6& p6, const T7& p7, const T8& p8,
-                   const T9& p9) {
-    new(space()) Type(p1, p2, p3, p4, p5, p6, p7, p8, p9);
-  }
-
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-            typename T6, typename T7, typename T8, typename T9, typename T10>
-  inline void Init(const T1& p1, const T2& p2, const T3& p3, const T4& p4,
-                   const T5& p5, const T6& p6, const T7& p7, const T8& p8,
-                   const T9& p9, const T10& p10) {
-    new(space()) Type(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
-  }
-
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-            typename T6, typename T7, typename T8, typename T9, typename T10,
-            typename T11>
-  inline void Init(const T1& p1, const T2& p2, const T3& p3, const T4& p4,
-                   const T5& p5, const T6& p6, const T7& p7, const T8& p8,
-                   const T9& p9, const T10& p10, const T11& p11) {
-    new(space()) Type(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11);
+  template <typename... Ts>
+  inline void Init(Ts&&... ps) {
+    new(space()) Type(std::forward<Ts>(ps)...);
   }
 
   inline void Destroy() {
