diff --git a/sprout/type_traits/is_destructible.hpp b/sprout/type_traits/is_destructible.hpp index 7c949a0c..1e2293fd 100644 --- a/sprout/type_traits/is_destructible.hpp +++ b/sprout/type_traits/is_destructible.hpp @@ -30,7 +30,7 @@ namespace sprout { static sprout::false_type test(...); }; #if defined(_MSC_VER) && (_MSC_VER > 1900) - template(0))>::type> + template(0))>::type> struct is_destructible_impl_0 : public Base_ {}; diff --git a/sprout/type_traits/is_nothrow_destructible.hpp b/sprout/type_traits/is_nothrow_destructible.hpp index 8dceba4d..00ba6dc9 100644 --- a/sprout/type_traits/is_nothrow_destructible.hpp +++ b/sprout/type_traits/is_nothrow_destructible.hpp @@ -27,7 +27,7 @@ namespace sprout { static sprout::false_type test(...); }; #if defined(_MSC_VER) && (_MSC_VER > 1900) - template(0))>::type> + template(0))>::type> struct is_nothrow_destructible_impl_0 : public Base_ {}; diff --git a/sprout/type_traits/result_of.hpp b/sprout/type_traits/result_of.hpp index 215213b6..42adab6c 100644 --- a/sprout/type_traits/result_of.hpp +++ b/sprout/type_traits/result_of.hpp @@ -32,44 +32,52 @@ namespace sprout { struct result_of_memfun_ref_helper { public: template - static sprout::identity().*std::declval())(std::declval()...))> test(int); + static sprout::identity().*std::declval())(std::declval()...))> test(sprout::types::type_tuple); template static sprout::detail::nil_base test(...); }; #if defined(_MSC_VER) && (_MSC_VER > 1900) template< - typename MemPtr, typename Arg, typename... Args, - typename Base_ = sprout::identity(0))>::type + typename MemPtr, typename Arg, typename Args, + typename Base_ = typename sprout::identity(Args()))>::type > - struct result_of_memfun_ref + struct result_of_memfun_ref_impl : public Base_ {}; + template + struct result_of_memfun_ref + : public sprout::detail::result_of_memfun_ref_impl > + {}; #else template struct result_of_memfun_ref - : public sprout::identity(0))>::type + : public sprout::identity(sprout::types::type_tuple()))>::type {}; #endif struct result_of_memfun_deref_helper { public: template - static sprout::identity()).*std::declval())(std::declval()...))> test(int); + static sprout::identity()).*std::declval())(std::declval()...))> test(sprout::types::type_tuple); template static sprout::detail::nil_base test(...); }; #if defined(_MSC_VER) && (_MSC_VER > 1900) template< - typename MemPtr, typename Arg, typename... Args, - typename Base_ = sprout::identity(0))>::type + typename MemPtr, typename Arg, typename Args, + typename Base_ = typename sprout::identity(Args()))>::type > - struct result_of_memfun_deref + struct result_of_memfun_deref_impl : public Base_ {}; + template + struct result_of_memfun_deref + : public sprout::detail::result_of_memfun_deref_impl > + {}; #else template struct result_of_memfun_deref - : public sprout::identity(0))>::type + : public sprout::identity(sprout::types::type_tuple()))>::type {}; #endif @@ -83,7 +91,7 @@ namespace sprout { #if defined(_MSC_VER) && (_MSC_VER > 1900) template< typename MemPtr, typename Arg, - typename Base_ = sprout::identity(0))>::type + typename Base_ = typename sprout::identity(0))>::type > struct result_of_memobj_ref : public Base_ @@ -105,7 +113,7 @@ namespace sprout { #if defined(_MSC_VER) && (_MSC_VER > 1900) template< typename MemPtr, typename Arg, - typename Base_ = sprout::identity(0))>::type + typename Base_ = typename sprout::identity(0))>::type > struct result_of_memobj_deref : public Base_ @@ -164,7 +172,7 @@ namespace sprout { template struct result_of_other_base { public: - typedef sprout::identity(0))>::type type; + typedef typename sprout::identity(0))>::type type; }; template struct result_of_other