diff options
Diffstat (limited to '3rdParty/Boost/src/boost/phoenix/core/call.hpp')
-rw-r--r-- | 3rdParty/Boost/src/boost/phoenix/core/call.hpp | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/phoenix/core/call.hpp b/3rdParty/Boost/src/boost/phoenix/core/call.hpp new file mode 100644 index 0000000..3667547 --- /dev/null +++ b/3rdParty/Boost/src/boost/phoenix/core/call.hpp @@ -0,0 +1,75 @@ +/*============================================================================== + Copyright (c) 2005-2010 Joel de Guzman + Copyright (c) 2011 Thomas Heller + + 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_CALL_HPP +#define BOOST_PHOENIX_CORE_CALL_HPP + +#include <boost/phoenix/core/limits.hpp> +#include <boost/phoenix/core/environment.hpp> +#include <boost/proto/proto_fwd.hpp> +#include <boost/proto/traits.hpp> +#include <boost/proto/transform/impl.hpp> + +namespace boost { namespace phoenix +{ + namespace detail + { + template < + typename Fun + , typename Expr + , typename State + , typename Data + , long Arity = proto::arity_of<Expr>::value + > + struct call_impl; + + template <typename Fun, typename Expr, typename State, typename Data> + struct call_impl<Fun, Expr, State, Data, 0> + : proto::transform_impl<Expr, State, Data> + { + typedef + typename boost::phoenix::result_of::context<State, Data>::type + context_type; + + typedef + typename boost::result_of< + Fun(Expr, context_type) + >::type + result_type; + + result_type operator()( + typename call_impl::expr_param e + , typename call_impl::state_param s + , typename call_impl::data_param d + ) const + { + return Fun()(e, boost::phoenix::context(s, d)); + } + }; + } + + template <typename Fun, typename Dummy = void> + struct call + : proto::transform<call<Fun> > + { + template <typename Expr, typename State, typename Data> + struct impl + : detail::call_impl<Fun, Expr, State, Data> + {}; + }; + + #include <boost/phoenix/core/detail/call.hpp> + +} + namespace proto + { + template <typename Fun, typename Dummy> + struct is_callable<phoenix::call<Fun, Dummy> > : mpl::true_ {}; + } +} + +#endif |