boost/xpressive/proto/proto_fwd.hpp
///////////////////////////////////////////////////////////////////////////////
/// \file proto_fwd.hpp
/// Forward declarations of all of proto's public types and functions.
//
// Copyright 2004 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_FWD_HPP_EAN_04_01_2005
#define BOOST_PROTO_FWD_HPP_EAN_04_01_2005
#include <boost/mpl/bool.hpp>
#include <boost/mpl/apply_fwd.hpp>
#include <boost/spirit/fusion/sequence/tuple_forward.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#ifndef BOOST_PROTO_MAX_ARITY
# define BOOST_PROTO_MAX_ARITY FUSION_MAX_TUPLE_SIZE
#endif
namespace boost { namespace proto
{
///////////////////////////////////////////////////////////////////////////////
// Operator tags
struct unary_tag;
struct binary_tag;
struct nary_tag;
struct noop_tag;
struct unary_plus_tag;
struct unary_minus_tag;
struct unary_star_tag;
struct complement_tag;
struct address_of_tag;
struct logical_not_tag;
struct pre_inc_tag;
struct pre_dec_tag;
struct post_inc_tag;
struct post_dec_tag;
struct left_shift_tag;
struct right_shift_tag;
struct multiply_tag;
struct divide_tag;
struct modulus_tag;
struct add_tag;
struct subtract_tag;
struct less_tag;
struct greater_tag;
struct less_equal_tag;
struct greater_equal_tag;
struct equal_tag;
struct not_equal_tag;
struct logical_or_tag;
struct logical_and_tag;
struct bitand_tag;
struct bitor_tag;
struct bitxor_tag;
struct comma_tag;
struct mem_ptr_tag;
struct assign_tag;
struct left_shift_assign_tag;
struct right_shift_assign_tag;
struct multiply_assign_tag;
struct divide_assign_tag;
struct modulus_assign_tag;
struct add_assign_tag;
struct subtract_assign_tag;
struct bitand_assign_tag;
struct bitor_assign_tag;
struct bitxor_assign_tag;
struct subscript_tag;
struct function_tag;
template<typename Tag>
struct is_unary;
template<typename Tag>
struct is_binary;
template<typename Tag>
struct is_nary;
template<typename Arg, typename Op>
struct unary_op;
template<typename Left, typename Right, typename Op>
struct binary_op;
template<typename Op, typename Param = void>
struct op_proxy;
template
<
typename Fun
, BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PROTO_MAX_ARITY, typename A, fusion::void_t)
>
struct nary_op;
template<typename Op, typename Arg>
unary_op<Arg, Op> const
make_op(Arg const &arg);
template<typename Op, typename Left, typename Right>
binary_op<Left, Right, Op> const
make_op(Left const &left, Right const &right);
template<typename Arg>
unary_op<Arg, noop_tag> const
noop(Arg const &arg);
struct op_root;
template<typename T>
struct is_proxy;
template<typename T>
struct is_op;
template<typename T, bool IsOp = is_op<T>::value>
struct as_op;
template<typename Op>
struct op_base;
template<typename T>
struct value_type;
template<typename Op>
struct arg_type;
template<typename Op>
struct left_type;
template<typename Op>
struct right_type;
template<typename Op>
struct tag_type;
template<typename OpTag, typename DomainTag, typename Dummy = void>
struct compiler;
template<typename OpTag, typename DomainTag, bool RightFirst = true>
struct fold_compiler;
template<typename Lambda, typename DomainTag, typename Compiler = void>
struct transform_compiler;
template<typename Lambda, typename DomainTag>
struct branch_compiler;
template<typename Predicate, typename IfCompiler, typename ElseCompiler>
struct conditional_compiler;
template<typename Lambda, typename Map>
struct switch_compiler;
struct error_compiler;
struct identity_transform;
struct arg_transform;
struct left_transform;
struct right_transform;
template<typename Always>
struct always_transform;
template<typename First, typename Second>
struct compose_transforms;
template<typename Predicate, typename IfTransform, typename ElseTransform = identity_transform>
struct conditional_transform;
template<typename Op>
typename arg_type<Op>::const_reference arg(Op const &op);
template<typename Op>
typename left_type<Op>::const_reference left(Op const &op);
template<typename Op>
typename right_type<Op>::const_reference right(Op const &op);
template<typename Op, typename State, typename Visitor, typename DomainTag>
struct compile_result;
template<typename Op, typename State, typename Visitor, typename DomainTag>
typename compile_result<Op, State, Visitor, DomainTag>::type const
compile(Op const &op, State const &state, Visitor &visitor, DomainTag tag_type);
}} // namespace boost::proto
#endif