Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r49693 - trunk/boost/spirit/home/phoenix/bind
From: joel_at_[hidden]
Date: 2008-11-12 02:25:42


Author: djowel
Date: 2008-11-12 02:25:42 EST (Wed, 12 Nov 2008)
New Revision: 49693
URL: http://svn.boost.org/trac/boost/changeset/49693

Log:
steven's patch for const
Text files modified:
   trunk/boost/spirit/home/phoenix/bind/bind_member_variable.hpp | 40 ++++++++++++++++++++++++++++++++++++++--
   1 files changed, 38 insertions(+), 2 deletions(-)

Modified: trunk/boost/spirit/home/phoenix/bind/bind_member_variable.hpp
==============================================================================
--- trunk/boost/spirit/home/phoenix/bind/bind_member_variable.hpp (original)
+++ trunk/boost/spirit/home/phoenix/bind/bind_member_variable.hpp 2008-11-12 02:25:42 EST (Wed, 12 Nov 2008)
@@ -1,7 +1,7 @@
 /*=============================================================================
     Copyright (c) 2001-2007 Joel de Guzman
 
- Distributed under the Boost Software License, Version 1.0. (See accompanying
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 ==============================================================================*/
 #ifndef PHOENIX_BIND_BIND_MEMBER_VARIABLE_HPP
@@ -11,6 +11,10 @@
 #include <boost/spirit/home/phoenix/core/compose.hpp>
 #include <boost/spirit/home/phoenix/core/reference.hpp>
 #include <boost/spirit/home/phoenix/core/detail/function_eval.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/remove_reference.hpp>
 
 namespace boost { namespace phoenix
 {
@@ -22,7 +26,27 @@
             template <typename Class>
             struct result
             {
- typedef RT& type;
+ typedef RT type;
+ };
+
+ template <typename Class>
+ struct result<Class&>
+ {
+ typedef typename boost::mpl::if_<
+ boost::is_const<Class>
+ , const RT&
+ , RT&
+ >::type type;
+ };
+
+ template <typename Class>
+ struct result<Class*>
+ {
+ typedef typename boost::mpl::if_<
+ boost::is_const<Class>
+ , const RT&
+ , RT&
+ >::type type;
             };
 
             member_variable(MP mp)
@@ -40,6 +64,18 @@
                 return obj->*mp;
             }
 
+ template <typename Class>
+ RT const& operator()(Class const& obj) const
+ {
+ return obj.*mp;
+ }
+
+ template <typename Class>
+ RT const& operator()(Class const* obj) const
+ {
+ return obj->*mp;
+ }
+
             MP mp;
         };
     }


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk