Server IP : 104.21.38.3 / Your IP : 162.158.189.20 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,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_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /www/server/mysql/src/boost/boost_1_59_0/boost/proto/ |
Upload File : |
/////////////////////////////////////////////////////////////////////////////// /// \file eval.hpp /// Contains the eval() expression evaluator. // // Copyright 2008 Eric Niebler. 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_PROTO_EVAL_HPP_EAN_03_29_2007 #define BOOST_PROTO_EVAL_HPP_EAN_03_29_2007 #include <boost/proto/proto_fwd.hpp> // BOOST_PROTO_CALLABLE #include <boost/type_traits/remove_reference.hpp> namespace boost { namespace proto { namespace result_of { /// \brief A metafunction for calculating the return type /// of \c proto::eval() given a certain \c Expr and \c Context /// types. /// /// \note The types \c Expr and \c Context should not be /// reference types. They may be cv-qualified, but the /// cv-qualification on the \c Context parameter is ignored. template<typename Expr, typename Context> struct eval { typedef typename Context::template eval<Expr>::result_type type; }; } namespace functional { /// \brief A PolymorphicFunctionObject type for /// evaluating a given Proto expression with a given /// context. struct eval { BOOST_PROTO_CALLABLE() template<typename Sig> struct result; template<typename This, typename Expr, typename Context> struct result<This(Expr, Context)> { typedef typename proto::result_of::eval< typename remove_reference<Expr>::type , typename remove_reference<Context>::type >::type type; }; /// \brief Evaluate a given Proto expression with a given /// context. /// \param expr The Proto expression to evaluate /// \param context The context in which the expression should be /// evaluated. /// \return <tt>typename Context::template eval<Expr>()(expr, context)</tt> template<typename Expr, typename Context> typename proto::result_of::eval<Expr, Context>::type operator ()(Expr &e, Context &ctx) const { return typename Context::template eval<Expr>()(e, ctx); } /// \overload /// template<typename Expr, typename Context> typename proto::result_of::eval<Expr, Context>::type operator ()(Expr &e, Context const &ctx) const { return typename Context::template eval<Expr>()(e, ctx); } /// \overload /// template<typename Expr, typename Context> typename proto::result_of::eval<Expr const, Context>::type operator ()(Expr const &e, Context &ctx) const { return typename Context::template eval<Expr const>()(e, ctx); } /// \overload /// template<typename Expr, typename Context> typename proto::result_of::eval<Expr const, Context>::type operator ()(Expr const &e, Context const &ctx) const { return typename Context::template eval<Expr const>()(e, ctx); } }; } /// \brief Evaluate a given Proto expression with a given /// context. /// \param expr The Proto expression to evaluate /// \param context The context in which the expression should be /// evaluated. /// \return <tt>typename Context::template eval<Expr>()(expr, context)</tt> template<typename Expr, typename Context> typename proto::result_of::eval<Expr, Context>::type eval(Expr &e, Context &ctx) { return typename Context::template eval<Expr>()(e, ctx); } /// \overload /// template<typename Expr, typename Context> typename proto::result_of::eval<Expr, Context>::type eval(Expr &e, Context const &ctx) { return typename Context::template eval<Expr>()(e, ctx); } /// \overload /// template<typename Expr, typename Context> typename proto::result_of::eval<Expr const, Context>::type eval(Expr const &e, Context &ctx) { return typename Context::template eval<Expr const>()(e, ctx); } /// \overload /// template<typename Expr, typename Context> typename proto::result_of::eval<Expr const, Context>::type eval(Expr const &e, Context const &ctx) { return typename Context::template eval<Expr const>()(e, ctx); } }} #endif