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>