/////////////////////////////////////////////////////////////////////////////// /// \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 #include #include #include #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 struct is_unary; template struct is_binary; template struct is_nary; template struct unary_op; template struct binary_op; template 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 unary_op const make_op(Arg const &arg); template binary_op const make_op(Left const &left, Right const &right); template unary_op const noop(Arg const &arg); struct op_root; template struct is_proxy; template struct is_op; template::value> struct as_op; template struct op_base; template struct value_type; template struct arg_type; template struct left_type; template struct right_type; template struct tag_type; template struct compiler; template struct fold_compiler; template struct transform_compiler; template struct branch_compiler; template struct conditional_compiler; template struct switch_compiler; struct error_compiler; struct identity_transform; struct arg_transform; struct left_transform; struct right_transform; template struct always_transform; template struct compose_transforms; template struct conditional_transform; template typename arg_type::const_reference arg(Op const &op); template typename left_type::const_reference left(Op const &op); template typename right_type::const_reference right(Op const &op); template struct compile_result; template typename compile_result::type const compile(Op const &op, State const &state, Visitor &visitor, DomainTag tag_type); }} // namespace boost::proto #endif