/usr/include/boost/phoenix/core
Edit: /usr/include/boost/phoenix/core/expression.hpp (3033B)
/*=============================================================================
Copyright (c) 2016 Kohei Takahashi
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_EXPRESSION_HPP
#define BOOST_PHOENIX_CORE_EXPRESSION_HPP
#include
#include
#include
#include
#include
#include
#include
#include
namespace boost { namespace phoenix
{
template struct actor;
#ifdef BOOST_PHOENIX_NO_VARIADIC_EXPRESSION
#include
#else
template class Actor, typename Tag, typename... A>
struct expr_ext;
// This filter cuts arguments of a template pack after a first void.
// It is necessary because the interface can be used in C++03 style.
template
struct expr_impl;
// Helper template. Used to store filtered argument types.
template
struct expr_arg_types {};
template
struct expr_impl> : expr_ext {};
template
struct expr_impl, void, T...> : expr_ext {};
template
struct expr_impl, H, T...> : expr_impl, T...> {};
template
struct expr : expr_impl, A...> {};
template class Actor, typename Tag, typename... A>
struct expr_ext
: proto::transform, int>
{
typedef
typename proto::result_of::make_expr<
Tag
, phoenix_default_domain //proto::basic_default_domain
, typename proto::detail::uncvref::type...
>::type
base_type;
typedef Actor type;
typedef typename proto::nary_expr::proto_grammar proto_grammar;
static type make(A const&... a)
{ //?? actor or Actor??
//Actor const e =
actor const e =
{
proto::make_expr(a...)
};
return e;
}
template
struct impl
: proto::pass_through::template impl
{};
typedef Tag proto_tag;
};
#endif
}}
#endif