$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: eric_at_[hidden]
Date: 2008-05-27 21:44:09
Author: eric_niebler
Date: 2008-05-27 21:44:08 EDT (Tue, 27 May 2008)
New Revision: 45847
URL: http://svn.boost.org/trac/boost/changeset/45847
Log:
fix bug in result_of calculation of members
Text files modified: 
   branches/proto/v4/boost/proto/detail/decltype.hpp |     8 +++++---                                
   1 files changed, 5 insertions(+), 3 deletions(-)
Modified: branches/proto/v4/boost/proto/detail/decltype.hpp
==============================================================================
--- branches/proto/v4/boost/proto/detail/decltype.hpp	(original)
+++ branches/proto/v4/boost/proto/detail/decltype.hpp	2008-05-27 21:44:08 EDT (Tue, 27 May 2008)
@@ -16,9 +16,11 @@
 #include <boost/preprocessor/repetition/enum_binary_params.hpp>
 #include <boost/preprocessor/repetition/repeat_from_to.hpp>
 #include <boost/mpl/if.hpp>
+#include <boost/type_traits/remove_cv.hpp>
 #include <boost/type_traits/is_function.hpp>
 #include <boost/typeof/typeof.hpp>
 #include <boost/utility/result_of.hpp>
+#include <boost/utility/enable_if.hpp>
 #include <boost/proto/detail/suffix.hpp> // must be last include
 
 // If we're generating doxygen documentation, hide all the nasty
@@ -137,19 +139,19 @@
         };
 
         ////////////////////////////////////////////////////////////////////////////////////////////
-        template<typename T>
+        template<typename T, typename Void = void>
         struct result_of_
           : boost::result_of<T>
         {};
 
         template<typename T, typename U, typename V>
-        struct result_of_<T U::*(V)>
+        struct result_of_<T U::*(V), typename disable_if<is_function<typename remove_cv<T>::type> >::type>
         {
             typedef T type;
         };
 
         template<typename T, typename U, typename V>
-        struct result_of_<T U::*(V &)>
+        struct result_of_<T U::*(V &), typename disable_if<is_function<typename remove_cv<T>::type> >::type>
         {
             typedef T &type;
         };