diff --git a/sprout/type_traits/is_copy_assignable.hpp b/sprout/type_traits/is_copy_assignable.hpp index d05b6339..c0fad464 100644 --- a/sprout/type_traits/is_copy_assignable.hpp +++ b/sprout/type_traits/is_copy_assignable.hpp @@ -10,15 +10,25 @@ #include #include -#include +#include namespace sprout { // // is_copy_assignable // + namespace detail { + template::value> + struct is_copy_assignable_impl + : public sprout::false_type + {}; + template + struct is_copy_assignable_impl + : public std::is_assignable + {}; + } // namespace detail template struct is_copy_assignable - : public sprout::detail::type_traits_wrapper > + : public sprout::detail::is_copy_assignable_impl {}; #if SPROUT_USE_VARIABLE_TEMPLATES diff --git a/sprout/type_traits/is_copy_constructible.hpp b/sprout/type_traits/is_copy_constructible.hpp index 413358da..3118accf 100644 --- a/sprout/type_traits/is_copy_constructible.hpp +++ b/sprout/type_traits/is_copy_constructible.hpp @@ -10,15 +10,25 @@ #include #include -#include +#include namespace sprout { // // is_copy_constructible // + namespace detail { + template::value> + struct is_copy_constructible_impl + : public sprout::false_type + {}; + template + struct is_copy_constructible_impl + : public std::is_constructible + {}; + } // namespace detail template struct is_copy_constructible - : public sprout::detail::type_traits_wrapper > + : public sprout::detail::is_copy_constructible_impl {}; #if SPROUT_USE_VARIABLE_TEMPLATES diff --git a/sprout/type_traits/is_move_assignable.hpp b/sprout/type_traits/is_move_assignable.hpp index 7c0f2cdf..c3674ab6 100644 --- a/sprout/type_traits/is_move_assignable.hpp +++ b/sprout/type_traits/is_move_assignable.hpp @@ -10,15 +10,25 @@ #include #include -#include +#include namespace sprout { // // is_move_assignable // + namespace detail { + template::value> + struct is_move_assignable_impl + : public sprout::false_type + {}; + template + struct is_move_assignable_impl + : public std::is_assignable + {}; + } // namespace detail template struct is_move_assignable - : public sprout::detail::type_traits_wrapper > + : public sprout::detail::is_move_assignable_impl {}; #if SPROUT_USE_VARIABLE_TEMPLATES diff --git a/sprout/type_traits/is_move_constructible.hpp b/sprout/type_traits/is_move_constructible.hpp index fe45a845..649287f7 100644 --- a/sprout/type_traits/is_move_constructible.hpp +++ b/sprout/type_traits/is_move_constructible.hpp @@ -10,15 +10,25 @@ #include #include -#include +#include namespace sprout { // // is_move_constructible // + namespace detail { + template::value> + struct is_move_constructible_impl + : public sprout::false_type + {}; + template + struct is_move_constructible_impl + : public std::is_constructible + {}; + } // namespace detail template struct is_move_constructible - : public sprout::detail::type_traits_wrapper > + : public sprout::detail::is_move_constructible_impl {}; #if SPROUT_USE_VARIABLE_TEMPLATES diff --git a/sprout/type_traits/is_nothrow_copy_assignable.hpp b/sprout/type_traits/is_nothrow_copy_assignable.hpp index 90bc6724..cf15032f 100644 --- a/sprout/type_traits/is_nothrow_copy_assignable.hpp +++ b/sprout/type_traits/is_nothrow_copy_assignable.hpp @@ -10,15 +10,26 @@ #include #include -#include +#include +#include namespace sprout { // // is_nothrow_copy_assignable // + namespace detail { + template::value> + struct is_nothrow_copy_assignable_impl + : public sprout::false_type + {}; + template + struct is_nothrow_copy_assignable_impl + : public sprout::is_nothrow_assignable + {}; + } // namespace detail template struct is_nothrow_copy_assignable - : public sprout::detail::type_traits_wrapper > + : public sprout::detail::is_nothrow_copy_assignable_impl {}; #if SPROUT_USE_VARIABLE_TEMPLATES diff --git a/sprout/type_traits/is_nothrow_copy_constructible.hpp b/sprout/type_traits/is_nothrow_copy_constructible.hpp index 72206d19..103560dc 100644 --- a/sprout/type_traits/is_nothrow_copy_constructible.hpp +++ b/sprout/type_traits/is_nothrow_copy_constructible.hpp @@ -10,15 +10,26 @@ #include #include -#include +#include +#include namespace sprout { // // is_nothrow_copy_constructible // + namespace detail { + template::value> + struct is_nothrow_copy_constructible_impl + : public sprout::false_type + {}; + template + struct is_nothrow_copy_constructible_impl + : public sprout::is_nothrow_constructible + {}; + } // namespace detail template struct is_nothrow_copy_constructible - : public sprout::detail::type_traits_wrapper > + : public sprout::detail::is_nothrow_copy_constructible_impl {}; #if SPROUT_USE_VARIABLE_TEMPLATES diff --git a/sprout/type_traits/is_nothrow_move_assignable.hpp b/sprout/type_traits/is_nothrow_move_assignable.hpp index 9951ef97..09699f2b 100644 --- a/sprout/type_traits/is_nothrow_move_assignable.hpp +++ b/sprout/type_traits/is_nothrow_move_assignable.hpp @@ -10,15 +10,26 @@ #include #include -#include +#include +#include namespace sprout { // // is_nothrow_move_assignable // + namespace detail { + template::value> + struct is_nothrow_move_assignable_impl + : public sprout::false_type + {}; + template + struct is_nothrow_move_assignable_impl + : public sprout::is_nothrow_assignable + {}; + } // namespace detail template struct is_nothrow_move_assignable - : public sprout::detail::type_traits_wrapper > + : public sprout::detail::is_nothrow_move_assignable_impl {}; #if SPROUT_USE_VARIABLE_TEMPLATES diff --git a/sprout/type_traits/is_nothrow_move_constructible.hpp b/sprout/type_traits/is_nothrow_move_constructible.hpp index 22fe98a1..88508f2c 100644 --- a/sprout/type_traits/is_nothrow_move_constructible.hpp +++ b/sprout/type_traits/is_nothrow_move_constructible.hpp @@ -10,15 +10,26 @@ #include #include -#include +#include +#include namespace sprout { // // is_nothrow_move_constructible // + namespace detail { + template::value> + struct is_nothrow_move_constructible_impl + : public sprout::false_type + {}; + template + struct is_nothrow_move_constructible_impl + : public sprout::is_nothrow_constructible + {}; + } // namespace detail template struct is_nothrow_move_constructible - : public sprout::detail::type_traits_wrapper > + : public sprout::detail::is_nothrow_move_constructible_impl {}; #if SPROUT_USE_VARIABLE_TEMPLATES diff --git a/sprout/type_traits/is_trivially_copy_assignable.hpp b/sprout/type_traits/is_trivially_copy_assignable.hpp index 5eb60f16..2007cd3c 100644 --- a/sprout/type_traits/is_trivially_copy_assignable.hpp +++ b/sprout/type_traits/is_trivially_copy_assignable.hpp @@ -10,27 +10,27 @@ #include #include +#include #include -#include namespace sprout { // // is_trivially_copy_assignable // -#if !defined(_LIBCPP_VERSION) + namespace detail { + template::value> + struct is_trivially_copy_assignable_impl + : public sprout::false_type + {}; + template + struct is_trivially_copy_assignable_impl + : public sprout::is_trivially_assignable + {}; + } // namespace detail template struct is_trivially_copy_assignable - : public sprout::is_trivially_assignable< - typename std::add_lvalue_reference::type, - typename std::add_lvalue_reference::type const - > + : public sprout::detail::is_trivially_copy_assignable_impl {}; -#else // #if !defined(_LIBCPP_VERSION) - template - struct is_trivially_copy_assignable - : public sprout::detail::type_traits_wrapper > - {}; -#endif // #if !defined(_LIBCPP_VERSION) #if SPROUT_USE_VARIABLE_TEMPLATES template diff --git a/sprout/type_traits/is_trivially_copy_constructible.hpp b/sprout/type_traits/is_trivially_copy_constructible.hpp index 524b1e69..77d7494b 100644 --- a/sprout/type_traits/is_trivially_copy_constructible.hpp +++ b/sprout/type_traits/is_trivially_copy_constructible.hpp @@ -10,24 +10,27 @@ #include #include +#include #include -#include namespace sprout { // // is_trivially_copy_constructible // -#if !defined(_LIBCPP_VERSION) + namespace detail { + template::value> + struct is_trivially_copy_constructible_impl + : public sprout::false_type + {}; + template + struct is_trivially_copy_constructible_impl + : public sprout::is_trivially_constructible + {}; + } // namespace detail template struct is_trivially_copy_constructible - : public sprout::is_trivially_constructible::type const> + : public sprout::detail::is_trivially_copy_constructible_impl {}; -#else // #if !defined(_LIBCPP_VERSION) - template - struct is_trivially_copy_constructible - : public sprout::detail::type_traits_wrapper > - {}; -#endif // #if !defined(_LIBCPP_VERSION) #if SPROUT_USE_VARIABLE_TEMPLATES template diff --git a/sprout/type_traits/is_trivially_move_assignable.hpp b/sprout/type_traits/is_trivially_move_assignable.hpp index 7fca4fb7..57a134ac 100644 --- a/sprout/type_traits/is_trivially_move_assignable.hpp +++ b/sprout/type_traits/is_trivially_move_assignable.hpp @@ -10,27 +10,27 @@ #include #include +#include #include -#include namespace sprout { // // is_trivially_move_assignable // -#if !defined(_LIBCPP_VERSION) + namespace detail { + template::value> + struct is_trivially_move_assignable_impl + : public sprout::false_type + {}; + template + struct is_trivially_move_assignable_impl + : public sprout::is_trivially_assignable + {}; + } // namespace detail template struct is_trivially_move_assignable - : public sprout::is_trivially_assignable< - typename std::add_lvalue_reference::type, - typename std::add_rvalue_reference::type - > + : public sprout::detail::is_trivially_move_assignable_impl {}; -#else // #if !defined(_LIBCPP_VERSION) - template - struct is_trivially_move_assignable - : public sprout::detail::type_traits_wrapper > - {}; -#endif // #if !defined(_LIBCPP_VERSION) #if SPROUT_USE_VARIABLE_TEMPLATES template diff --git a/sprout/type_traits/is_trivially_move_constructible.hpp b/sprout/type_traits/is_trivially_move_constructible.hpp index 3d99ad08..b354b3e9 100644 --- a/sprout/type_traits/is_trivially_move_constructible.hpp +++ b/sprout/type_traits/is_trivially_move_constructible.hpp @@ -10,24 +10,27 @@ #include #include +#include #include -#include namespace sprout { // // is_trivially_move_constructible // -#if !defined(_LIBCPP_VERSION) + namespace detail { + template::value> + struct is_trivially_move_constructible_impl + : public sprout::false_type + {}; + template + struct is_trivially_move_constructible_impl + : public sprout::is_trivially_constructible + {}; + } // namespace detail template struct is_trivially_move_constructible - : public sprout::is_trivially_constructible::type> + : public sprout::detail::is_trivially_move_constructible_impl {}; -#else // #if !defined(_LIBCPP_VERSION) - template - struct is_trivially_move_constructible - : public sprout::detail::type_traits_wrapper > - {}; -#endif // #if !defined(_LIBCPP_VERSION) #if SPROUT_USE_VARIABLE_TEMPLATES template