/usr/include/boost/proto
NameSizeModeActions
context/-0755rm
detail/-0755rm
functional/-0755rm
transform/-0755rm
args.hpp37610644editdlrm
context.hpp5920644editdlrm
core.hpp10440644editdlrm
debug.hpp107470644editdlrm
deep_copy.hpp53960644editdlrm
domain.hpp116160644editdlrm
eval.hpp47660644editdlrm
expr.hpp54270644editdlrm
extends.hpp433190644editdlrm
functional.hpp5760644editdlrm
fusion.hpp209340644editdlrm
generate.hpp144670644editdlrm
literal.hpp34960644editdlrm
make_expr.hpp193050644editdlrm
matches.hpp348010644editdlrm
operators.hpp258330644editdlrm
proto.hpp5810644editdlrm
proto_fwd.hpp293850644editdlrm
proto_typeof.hpp61030644editdlrm
repeat.hpp113840644editdlrm
tags.hpp39600644editdlrm
traits.hpp459380644editdlrm
transform.hpp9500644editdlrm
Edit: /usr/include/boost/proto/eval.hpp (4766B)
/////////////////////////////////////////////////////////////////////////////// /// \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_CALLABLE #include 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 struct eval { typedef typename Context::template eval::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 struct result; template struct result { typedef typename proto::result_of::eval< typename remove_reference::type , typename remove_reference::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 typename Context::template eval()(expr, context) template typename proto::result_of::eval::type operator ()(Expr &e, Context &ctx) const { return typename Context::template eval()(e, ctx); } /// \overload /// template typename proto::result_of::eval::type operator ()(Expr &e, Context const &ctx) const { return typename Context::template eval()(e, ctx); } /// \overload /// template typename proto::result_of::eval::type operator ()(Expr const &e, Context &ctx) const { return typename Context::template eval()(e, ctx); } /// \overload /// template typename proto::result_of::eval::type operator ()(Expr const &e, Context const &ctx) const { return typename Context::template eval()(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 typename Context::template eval()(expr, context) template typename proto::result_of::eval::type eval(Expr &e, Context &ctx) { return typename Context::template eval()(e, ctx); } /// \overload /// template typename proto::result_of::eval::type eval(Expr &e, Context const &ctx) { return typename Context::template eval()(e, ctx); } /// \overload /// template typename proto::result_of::eval::type eval(Expr const &e, Context &ctx) { return typename Context::template eval()(e, ctx); } /// \overload /// template typename proto::result_of::eval::type eval(Expr const &e, Context const &ctx) { return typename Context::template eval()(e, ctx); } }} #endif