diff --git a/single.py b/single.py
index bd8cad79..df63616f 100644
--- a/single.py
+++ b/single.py
@@ -23,7 +23,7 @@ parser.add_argument(
     help=
     'name and location of where to place file (and forward declaration file)',
     metavar='file',
-    default='sol.hpp')
+    default=['sol.hpp'])
 parser.add_argument('--quiet', help='suppress all output', action='store_true')
 args = parser.parse_args()
 
diff --git a/sol/container_traits.hpp b/sol/container_traits.hpp
index 665a3274..09332c72 100644
--- a/sol/container_traits.hpp
+++ b/sol/container_traits.hpp
@@ -340,6 +340,21 @@ namespace sol {
 			static const bool value = sizeof(test<T>(0)) == sizeof(char);
 		};
 
+		template <typename T>
+		struct has_traits_size_test {
+		private:
+			typedef std::array<char, 1> one;
+			typedef std::array<char, 2> two;
+
+			template <typename C>
+			static one test(decltype(&C::size));
+			template <typename C>
+			static two test(...);
+
+		public:
+			static const bool value = sizeof(test<T>(0)) == sizeof(char);
+		};
+
 		template <typename T>
 		using has_clear = meta::boolean<has_clear_test<T>::value>;
 
@@ -383,7 +398,7 @@ namespace sol {
 		using has_traits_add = meta::boolean<has_traits_add_test<T>::value>;
 
 		template <typename T>
-		using has_traits_size = meta::has_size<T>;
+		using has_traits_size = meta::boolean<has_traits_size_test<T>::value>;
 
 		template <typename T>
 		using has_traits_clear = has_clear<T>;
diff --git a/sol/raii.hpp b/sol/raii.hpp
index 22573163..431e45e8 100644
--- a/sol/raii.hpp
+++ b/sol/raii.hpp
@@ -35,7 +35,7 @@ namespace sol {
 			static void construct(T&& obj, Args&&... args) {
 				typedef meta::unqualified_t<T> Tu;
 				std::allocator<Tu> alloc{};
-				std::allocator_traits<std::allocator<Tu>>::construct(alloc, obj, std::forward<Args>(args)...);
+				std::allocator_traits<std::allocator<Tu>>::construct(alloc, std::forward<T>(obj), std::forward<Args>(args)...);
 			}
 
 			template <typename T, typename... Args>
diff --git a/sol/traits.hpp b/sol/traits.hpp
index 491ac567..8be999fb 100644
--- a/sol/traits.hpp
+++ b/sol/traits.hpp
@@ -32,6 +32,7 @@
 #include <cstdint>
 #include <memory>
 #include <functional>
+#include <array>
 #include <iterator>
 #include <iosfwd>