![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /proc/thread-self/root/usr/include/boost/phoenix/bind/detail/ |
Upload File : |
/*============================================================================= Copyright (c) 2001-2007 Joel de Guzman 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 BOOST_PHOENIX_CORE_DETAIL_MEMBER_VARIABLE_HPP #define BOOST_PHOENIX_CORE_DETAIL_MEMBER_VARIABLE_HPP #include <boost/proto/detail/decltype.hpp> #include <boost/type_traits/remove_pointer.hpp> #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4180) // qualifier applied to function type has no meaning; ignored #endif namespace boost { namespace phoenix { namespace detail { template <typename RT, typename MP> struct member_variable { template <typename Sig> struct result; template <typename This, typename Class> struct result<This(Class)> : result<This(Class const &)> {}; template <typename This, typename Class> struct result<This(Class &)> { typedef typename boost::mpl::if_c< boost::is_const< typename boost::remove_pointer< typename boost::remove_reference<Class>::type >::type >::value , const RT& , RT& >::type type; }; member_variable(MP mp_) : mp(mp_) {} template <typename Class> RT& operator()(Class& obj) const { BOOST_PROTO_USE_GET_POINTER(); typedef typename proto::detail::class_member_traits<MP>::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*mp); } template <typename Class> RT& operator()(Class* obj) const { return obj->*mp; } template <typename Class> RT const& operator()(Class const& obj) const { BOOST_PROTO_USE_GET_POINTER(); typedef typename proto::detail::class_member_traits<MP>::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*mp); } template <typename Class> RT const& operator()(Class const* obj) const { return obj->*mp; } MP mp; }; }}} #ifdef _MSC_VER #pragma warning(pop) #endif #endif