$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r86626 - in trunk: boost/intrusive/detail libs/intrusive/test
From: igaztanaga_at_[hidden]
Date: 2013-11-11 17:21:22
Author: igaztanaga
Date: 2013-11-11 17:21:22 EST (Mon, 11 Nov 2013)
New Revision: 86626
URL: http://svn.boost.org/trac/boost/changeset/86626
Log:
Fixes #9332
Text files modified: 
   trunk/boost/intrusive/detail/has_member_function_callable_with.hpp |    13 +++++++++++--                           
   trunk/libs/intrusive/test/has_member_function_callable_with.cpp    |    18 +++++++++++++-----                      
   2 files changed, 24 insertions(+), 7 deletions(-)
Modified: trunk/boost/intrusive/detail/has_member_function_callable_with.hpp
==============================================================================
--- trunk/boost/intrusive/detail/has_member_function_callable_with.hpp	Mon Nov 11 17:12:13 2013	(r86625)
+++ trunk/boost/intrusive/detail/has_member_function_callable_with.hpp	2013-11-11 17:21:22 EST (Mon, 11 Nov 2013)	(r86626)
@@ -195,6 +195,8 @@
             static const bool value = false;
          };
 
+         #ifdef BOOST_NO_CXX11_DECLTYPE
+
          //Special case for 0 args
          template< class F
                , std::size_t N =
@@ -215,14 +217,21 @@
             BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)(int);
          };
 
+         #endif   //#ifdef BOOST_NO_CXX11_DECLTYPE
+
          template<typename Fun>
          struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl)
             <Fun, true>
          {
+            #ifndef BOOST_NO_CXX11_DECLTYPE
+            template<class U, class V = decltype(boost::move_detail::declval<Fun>().BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME()) >
+            static boost_intrusive_has_member_function_callable_with::yes_type Test(Fun*);
+            #else
             template<class U>
-            static BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
+               static BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
                <U> Test(BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<U>*);
-
+            #endif
+   
             template <class U>
             static boost_intrusive_has_member_function_callable_with::no_type Test(...);
 
Modified: trunk/libs/intrusive/test/has_member_function_callable_with.cpp
==============================================================================
--- trunk/libs/intrusive/test/has_member_function_callable_with.cpp	Mon Nov 11 17:12:13 2013	(r86625)
+++ trunk/libs/intrusive/test/has_member_function_callable_with.cpp	2013-11-11 17:21:22 EST (Mon, 11 Nov 2013)	(r86626)
@@ -68,7 +68,7 @@
 
 }}}
 
-#if !defined(BOOST_CONTAINER_PERFECT_FORWARDING)
+#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING)
 
    namespace boost{
    namespace intrusive{
@@ -259,7 +259,7 @@
 
    }}}
 
-#else
+#else //#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING)
 
    namespace boost{
    namespace intrusive{
@@ -283,6 +283,7 @@
    namespace intrusive{
    namespace intrusive_detail{
 
+   #ifdef BOOST_NO_CXX11_DECLTYPE
    template<class F, std::size_t N = sizeof(boost::move_detail::declval<F>().func(), 0)>
    struct zeroarg_checker_func
    {
@@ -299,12 +300,19 @@
       zeroarg_checker_func(int);
    };
 
+   #endif   //BOOST_NO_CXX11_DECLTYPE
+
    template<typename Fun>
    struct has_member_function_callable_with_func_impl
       <Fun, true>
    {
-      template<class U>
-      static zeroarg_checker_func<U> Test(zeroarg_checker_func<U>*);
+      #ifndef BOOST_NO_CXX11_DECLTYPE
+      template<class U, class V = decltype(boost::move_detail::declval<Fun>().func()) >
+         static boost_intrusive_has_member_function_callable_with::yes_type Test(U*);
+      #else
+         template<class U>
+         static zeroarg_checker_func<U> Test(zeroarg_checker_func<U>*);
+      #endif
 
       template <class U>
       static has_member_function_callable_with::no_type Test(...);
@@ -356,7 +364,7 @@
 
    }}}
 
-#endif
+#endif   //#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING)
 
 struct functor
 {