annotate DEPENDENCIES/generic/include/boost/phoenix/bind/detail/member_variable.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 /*=============================================================================
Chris@16 2 Copyright (c) 2001-2007 Joel de Guzman
Chris@16 3
Chris@16 4 Distributed under the Boost Software License, Version 1.0. (See accompanying
Chris@16 5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 6 ==============================================================================*/
Chris@16 7 #ifndef BOOST_PHOENIX_CORE_DETAIL_MEMBER_VARIABLE_HPP
Chris@16 8 #define BOOST_PHOENIX_CORE_DETAIL_MEMBER_VARIABLE_HPP
Chris@16 9
Chris@16 10 #include <boost/proto/detail/decltype.hpp>
Chris@16 11 #include <boost/type_traits/remove_pointer.hpp>
Chris@16 12
Chris@16 13 #ifdef _MSC_VER
Chris@16 14 #pragma warning(push)
Chris@16 15 #pragma warning(disable: 4180) // qualifier applied to function type has no meaning; ignored
Chris@16 16 #endif
Chris@16 17
Chris@16 18 namespace boost { namespace phoenix { namespace detail {
Chris@16 19
Chris@16 20 template <typename RT, typename MP>
Chris@16 21 struct member_variable
Chris@16 22 {
Chris@16 23 template <typename Sig>
Chris@16 24 struct result;
Chris@16 25
Chris@16 26 template <typename This, typename Class>
Chris@16 27 struct result<This(Class)>
Chris@16 28 : result<This(Class const &)>
Chris@16 29 {};
Chris@16 30
Chris@16 31 template <typename This, typename Class>
Chris@16 32 struct result<This(Class &)>
Chris@16 33 {
Chris@16 34 typedef typename boost::mpl::if_c<
Chris@16 35 boost::is_const<
Chris@16 36 typename boost::remove_pointer<
Chris@16 37 typename boost::remove_reference<Class>::type
Chris@16 38 >::type
Chris@16 39 >::value
Chris@16 40 , const RT&
Chris@16 41 , RT&
Chris@16 42 >::type
Chris@16 43 type;
Chris@16 44 };
Chris@16 45
Chris@101 46 member_variable(MP mp_)
Chris@101 47 : mp(mp_) {}
Chris@16 48
Chris@16 49 template <typename Class>
Chris@16 50 RT& operator()(Class& obj) const
Chris@16 51 {
Chris@16 52 BOOST_PROTO_USE_GET_POINTER();
Chris@16 53
Chris@16 54 typedef typename proto::detail::class_member_traits<MP>::class_type class_type;
Chris@16 55 return (BOOST_PROTO_GET_POINTER(class_type, obj)->*mp);
Chris@16 56 }
Chris@16 57
Chris@16 58 template <typename Class>
Chris@101 59 RT& operator()(Class* obj) const
Chris@101 60 {
Chris@101 61 return obj->*mp;
Chris@101 62 }
Chris@101 63
Chris@101 64 template <typename Class>
Chris@16 65 RT const& operator()(Class const& obj) const
Chris@16 66 {
Chris@16 67 BOOST_PROTO_USE_GET_POINTER();
Chris@16 68
Chris@16 69 typedef typename proto::detail::class_member_traits<MP>::class_type class_type;
Chris@16 70 return (BOOST_PROTO_GET_POINTER(class_type, obj)->*mp);
Chris@16 71 }
Chris@16 72
Chris@16 73 template <typename Class>
Chris@16 74 RT const& operator()(Class const* obj) const
Chris@16 75 {
Chris@16 76 return obj->*mp;
Chris@16 77 }
Chris@16 78
Chris@16 79 MP mp;
Chris@16 80 };
Chris@16 81 }}}
Chris@16 82
Chris@16 83 #ifdef _MSC_VER
Chris@16 84 #pragma warning(pop)
Chris@16 85 #endif
Chris@16 86
Chris@16 87 #endif