123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892 |
- ///////////////////////////////////////////////////////////////////////////////
- /// \file proto_fwd.hpp
- /// Forward declarations of all of proto's public types and functions.
- //
- // 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_FWD_HPP_EAN_04_01_2005
- #define BOOST_PROTO_FWD_HPP_EAN_04_01_2005
- #include <cstddef>
- #include <climits>
- #include <boost/config.hpp>
- #include <boost/detail/workaround.hpp>
- #include <boost/preprocessor/cat.hpp>
- #include <boost/preprocessor/arithmetic/inc.hpp>
- #include <boost/preprocessor/punctuation/comma.hpp>
- #include <boost/preprocessor/repetition/enum_params.hpp>
- #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
- #include <boost/preprocessor/repetition/enum_trailing_binary_params.hpp>
- #include <boost/preprocessor/repetition/repeat_from_to.hpp>
- #include <boost/ref.hpp>
- #include <boost/mpl/long.hpp>
- #include <boost/type_traits/remove_const.hpp>
- #include <boost/type_traits/remove_reference.hpp>
- #include <boost/mpl/aux_/config/ttp.hpp>
- #include <boost/utility/result_of.hpp>
- #ifndef BOOST_PROTO_MAX_ARITY
- # define BOOST_PROTO_MAX_ARITY 10
- #endif
- #ifndef BOOST_PROTO_MAX_LOGICAL_ARITY
- # define BOOST_PROTO_MAX_LOGICAL_ARITY 10
- #endif
- #ifndef BOOST_PROTO_MAX_FUNCTION_CALL_ARITY
- # define BOOST_PROTO_MAX_FUNCTION_CALL_ARITY BOOST_PROTO_MAX_ARITY
- #endif
- #if BOOST_PROTO_MAX_ARITY < 3
- # error BOOST_PROTO_MAX_ARITY must be at least 3
- #endif
- #if BOOST_PROTO_MAX_FUNCTION_CALL_ARITY > BOOST_PROTO_MAX_ARITY
- # error BOOST_PROTO_MAX_FUNCTION_CALL_ARITY cannot be larger than BOOST_PROTO_MAX_ARITY
- #endif
- #ifndef BOOST_PROTO_DONT_USE_PREPROCESSED_FILES
- #if 10 < BOOST_PROTO_MAX_ARITY || \
- 10 < BOOST_PROTO_MAX_LOGICAL_ARITY || \
- 10 < BOOST_PROTO_MAX_FUNCTION_CALL_ARITY
- #define BOOST_PROTO_DONT_USE_PREPROCESSED_FILES
- #endif
- #endif
- #ifndef BOOST_PROTO_BROKEN_CONST_OVERLOADS
- # if BOOST_WORKAROUND(__GNUC__, == 3) \
- || BOOST_WORKAROUND(__EDG_VERSION__, BOOST_TESTED_AT(310))
- # define BOOST_PROTO_BROKEN_CONST_OVERLOADS
- # endif
- #endif
- #ifndef BOOST_PROTO_BROKEN_CONST_QUALIFIED_FUNCTIONS
- # if BOOST_WORKAROUND(__GNUC__, == 3) \
- || BOOST_WORKAROUND(__EDG_VERSION__, BOOST_TESTED_AT(310))
- # define BOOST_PROTO_BROKEN_CONST_QUALIFIED_FUNCTIONS
- # endif
- #endif
- #ifdef BOOST_PROTO_BROKEN_CONST_OVERLOADS
- # include <boost/utility/enable_if.hpp>
- # include <boost/type_traits/is_const.hpp>
- # define BOOST_PROTO_DISABLE_IF_IS_CONST(T)\
- , typename boost::disable_if_c<boost::is_const<T>::value, boost::proto::detail::undefined>::type * = 0
- #else
- # define BOOST_PROTO_DISABLE_IF_IS_CONST(T)
- #endif
- #ifdef BOOST_PROTO_BROKEN_CONST_QUALIFIED_FUNCTIONS
- # include <boost/utility/enable_if.hpp>
- # include <boost/type_traits/is_function.hpp>
- # define BOOST_PROTO_DISABLE_IF_IS_FUNCTION(T)\
- , typename boost::disable_if_c<boost::is_function<T>::value, boost::proto::detail::undefined>::type * = 0
- #else
- # define BOOST_PROTO_DISABLE_IF_IS_FUNCTION(T)
- #endif
- #ifndef BOOST_PROTO_BROKEN_PTS
- # if BOOST_WORKAROUND(BOOST_MSVC, <= 1400)
- # define BOOST_PROTO_BROKEN_PTS
- # endif
- #endif
- #ifdef BOOST_NO_CXX11_DECLTYPE_N3276
- # // Proto can only use the decltype-based result_of if N3276 has been
- # // implemented by the compiler.
- # // See http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011/n3276.pdf
- # ifndef BOOST_PROTO_USE_NORMAL_RESULT_OF
- # define BOOST_PROTO_USE_NORMAL_RESULT_OF
- # endif
- #endif
- // Unless compiler support is there, use tr1_result_of instead of
- // result_of to avoid the problems addressed by N3276.
- #ifdef BOOST_PROTO_USE_NORMAL_RESULT_OF
- # define BOOST_PROTO_RESULT_OF boost::result_of
- #else
- # define BOOST_PROTO_RESULT_OF boost::tr1_result_of
- #endif
- // If we're using the decltype-based result_of, we need to be a bit
- // stricter about the return types of some functions.
- #if defined(BOOST_RESULT_OF_USE_DECLTYPE) && defined(BOOST_PROTO_USE_NORMAL_RESULT_OF)
- # define BOOST_PROTO_STRICT_RESULT_OF
- # define BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(X, Y) X
- #else
- # define BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(X, Y) Y
- #endif
- #ifdef BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING
- # define BOOST_PROTO_EXTENDED_TEMPLATE_PARAMETERS_MATCHING
- #endif
- #if defined(_MSC_VER)
- # define BOOST_PROTO_PUSH_WARNINGS __pragma(warning(push))
- # define BOOST_PROTO_POP_WARNINGS __pragma(warning(pop))
- # define BOOST_PROTO_DISABLE_MSVC_C4180 __pragma(warning(disable : 4180)) // qualifier applied to function type has no meaning; ignored
- # define BOOST_PROTO_DISABLE_MSVC_C4522 __pragma(warning(disable : 4522)) // 'class' : multiple assignment operators specified
- # define BOOST_PROTO_DISABLE_MSVC_C4714 __pragma(warning(disable : 4714)) // function 'xxx' marked as __forceinline not inlined
- #else
- # define BOOST_PROTO_PUSH_WARNINGS
- # define BOOST_PROTO_POP_WARNINGS
- # define BOOST_PROTO_DISABLE_MSVC_C4180
- # define BOOST_PROTO_DISABLE_MSVC_C4522
- # define BOOST_PROTO_DISABLE_MSVC_C4714
- #endif
- namespace boost { namespace proto
- {
- namespace detail
- {
- typedef char yes_type;
- typedef char (&no_type)[2];
- template<int N>
- struct sized_type
- {
- typedef char (&type)[N];
- };
- struct dont_care;
- struct undefined; // leave this undefined
- struct not_a_valid_type;
- struct private_type_
- {
- private_type_ operator ,(int) const;
- };
- template<typename T>
- struct uncvref
- {
- typedef T type;
- };
- template<typename T>
- struct uncvref<T const>
- {
- typedef T type;
- };
- template<typename T>
- struct uncvref<T &>
- {
- typedef T type;
- };
- template<typename T>
- struct uncvref<T const &>
- {
- typedef T type;
- };
- template<typename T, std::size_t N>
- struct uncvref<T const[N]>
- {
- typedef T type[N];
- };
- template<typename T, std::size_t N>
- struct uncvref<T (&)[N]>
- {
- typedef T type[N];
- };
- template<typename T, std::size_t N>
- struct uncvref<T const (&)[N]>
- {
- typedef T type[N];
- };
- struct ignore
- {
- ignore()
- {}
- template<typename T>
- ignore(T const &)
- {}
- };
- /// INTERNAL ONLY
- ///
- #define BOOST_PROTO_UNCVREF(X) \
- typename boost::proto::detail::uncvref<X>::type \
- /**/
- struct _default;
- struct not_a_domain;
- struct not_a_grammar;
- struct not_a_generator;
- template<typename T, typename Void = void>
- struct is_transform_;
- template<typename T, typename Void = void>
- struct is_aggregate_;
- template<typename Expr>
- struct flat_view;
- }
- typedef detail::ignore const ignore;
- namespace argsns_
- {
- template<typename Arg0>
- struct term;
- #define M0(Z, N, DATA) \
- template<BOOST_PP_ENUM_PARAMS_Z(Z, N, typename Arg)> struct BOOST_PP_CAT(list, N); \
- /**/
- BOOST_PP_REPEAT_FROM_TO(1, BOOST_PP_INC(BOOST_PROTO_MAX_ARITY), M0, ~)
- #undef M0
- }
- using namespace argsns_;
- ///////////////////////////////////////////////////////////////////////////////
- // Operator tags
- namespace tagns_
- {
- namespace tag
- {
- struct terminal;
- struct unary_plus;
- struct negate;
- struct dereference;
- struct complement;
- struct address_of;
- struct logical_not;
- struct pre_inc;
- struct pre_dec;
- struct post_inc;
- struct post_dec;
- struct shift_left;
- struct shift_right;
- struct multiplies;
- struct divides;
- struct modulus;
- struct plus;
- struct minus;
- struct less;
- struct greater;
- struct less_equal;
- struct greater_equal;
- struct equal_to;
- struct not_equal_to;
- struct logical_or;
- struct logical_and;
- struct bitwise_and;
- struct bitwise_or;
- struct bitwise_xor;
- struct comma;
- struct mem_ptr;
- struct assign;
- struct shift_left_assign;
- struct shift_right_assign;
- struct multiplies_assign;
- struct divides_assign;
- struct modulus_assign;
- struct plus_assign;
- struct minus_assign;
- struct bitwise_and_assign;
- struct bitwise_or_assign;
- struct bitwise_xor_assign;
- struct subscript;
- struct member;
- struct if_else_;
- struct function;
- // Fusion tags
- template<typename Tag, typename Domain> struct proto_expr;
- template<typename Tag, typename Domain> struct proto_expr_iterator;
- template<typename Tag, typename Domain> struct proto_flat_view;
- }
- }
- using namespace tagns_;
- template<typename Expr>
- struct tag_of;
- ////////////////////////////////////////////////////////////////////////////////////////////////
- struct _;
- ////////////////////////////////////////////////////////////////////////////////////////////////
- struct default_generator;
- struct basic_default_generator;
- template<template<typename> class Extends>
- struct generator;
- template<template<typename> class Extends>
- struct pod_generator;
- struct by_value_generator;
- template<typename First, typename Second>
- struct compose_generators;
- template<typename Generator, typename Void = void>
- struct wants_basic_expr;
- template<typename Generator>
- struct use_basic_expr;
- ////////////////////////////////////////////////////////////////////////////////////////////////
- namespace domainns_
- {
- typedef detail::not_a_domain no_super_domain;
- template<
- typename Generator = default_generator
- , typename Grammar = proto::_
- , typename Super = no_super_domain
- >
- struct domain;
- struct default_domain;
- struct basic_default_domain;
- struct deduce_domain;
- template<typename Domain, typename Tag, typename Args, bool WantsBasicExpr = wants_basic_expr<typename Domain::proto_generator>::value>
- struct base_expr;
- }
- using namespace domainns_;
- ////////////////////////////////////////////////////////////////////////////////////////////////
- namespace exprns_
- {
- template<typename Tag, typename Args, long Arity = Args::arity>
- struct basic_expr;
- template<typename Tag, typename Args, long Arity = Args::arity>
- struct expr;
- template<
- typename Expr
- , typename Derived
- , typename Domain = default_domain
- , long Arity = Expr::proto_arity_c
- >
- struct extends;
- template<typename This, typename Fun, typename Domain>
- struct virtual_member;
-
- struct is_proto_expr;
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////
- using exprns_::expr;
- using exprns_::basic_expr;
- using exprns_::extends;
- using exprns_::is_proto_expr;
- template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PROTO_MAX_LOGICAL_ARITY, typename G, void)>
- struct or_;
- template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PROTO_MAX_LOGICAL_ARITY, typename G, void)>
- struct and_;
- template<typename Grammar>
- struct not_;
- template<typename Condition, typename Then = _, typename Else = not_<_> >
- struct if_;
- template<typename Cases, typename Transform = tag_of<_>()>
- struct switch_;
- template<typename T>
- struct exact;
- template<typename T>
- struct convertible_to;
- template<typename Grammar>
- struct vararg;
- struct pack;
- // Boost bug https://svn.boost.org/trac/boost/ticket/4602
- //int const N = INT_MAX;
- int const N = (INT_MAX >> 10);
- namespace context
- {
- struct null_context;
- template<typename Expr, typename Context, long Arity = Expr::proto_arity_c>
- struct null_eval;
- struct default_context;
- template<typename Expr, typename Context, typename Tag = typename Expr::proto_tag, long Arity = Expr::proto_arity_c>
- struct default_eval;
- template<typename Derived, typename DefaultCtx = default_context>
- struct callable_context;
- template<typename Expr, typename Context, long Arity = Expr::proto_arity_c>
- struct callable_eval;
- }
- using context::null_context;
- using context::null_eval;
- using context::default_context;
- using context::default_eval;
- using context::callable_context;
- using context::callable_eval;
- namespace utility
- {
- template<typename T, typename Domain = default_domain>
- struct literal;
- }
- using utility::literal;
- namespace result_of
- {
- template<typename T, typename Domain = default_domain>
- struct as_expr;
- template<typename T, typename Domain = default_domain>
- struct as_child;
- template<typename Expr, typename N = mpl::long_<0> >
- struct child;
- template<typename Expr, long N>
- struct child_c;
- template<typename Expr>
- struct left;
- template<typename Expr>
- struct right;
- template<typename Expr>
- struct deep_copy;
- template<typename Expr, typename Context>
- struct eval;
- template<
- typename Tag
- , typename DomainOrA0
- BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(
- BOOST_PROTO_MAX_ARITY
- , typename A
- , = void BOOST_PP_INTERCEPT
- )
- , typename Void = void
- >
- struct make_expr;
- template<typename Tag, typename DomainOrSequence, typename SequenceOrVoid = void, typename Void = void>
- struct unpack_expr;
- template<typename T>
- struct as_env;
- template<typename Env, typename Tag>
- struct has_env_var;
- template<typename Env, typename Tag>
- struct env_var;
- }
- template<typename T, typename Void = void>
- struct is_expr;
- template<typename T, typename Void = void>
- struct is_domain;
- template<typename SubDomain, typename SuperDomain>
- struct is_sub_domain_of;
- template<typename T, typename Void = void>
- struct is_env;
- template<typename Expr>
- struct arity_of;
- template<typename T, typename Void = void>
- struct domain_of;
- template<typename Expr, typename Grammar>
- struct matches;
- // Generic expression metafunctions and
- // grammar elements
- template<typename Tag, typename Arg>
- struct unary_expr;
- template<typename Tag, typename Left, typename Right>
- struct binary_expr;
- template<typename Tag, BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PROTO_MAX_ARITY, typename A, void)>
- struct nary_expr;
- // Specific expression metafunctions and
- // grammar elements, for convenience
- template<typename T> struct terminal;
- template<typename T> struct unary_plus;
- template<typename T> struct negate;
- template<typename T> struct dereference;
- template<typename T> struct complement;
- template<typename T> struct address_of;
- template<typename T> struct logical_not;
- template<typename T> struct pre_inc;
- template<typename T> struct pre_dec;
- template<typename T> struct post_inc;
- template<typename T> struct post_dec;
- template<typename T, typename U> struct shift_left;
- template<typename T, typename U> struct shift_right;
- template<typename T, typename U> struct multiplies;
- template<typename T, typename U> struct divides;
- template<typename T, typename U> struct modulus;
- template<typename T, typename U> struct plus;
- template<typename T, typename U> struct minus;
- template<typename T, typename U> struct less;
- template<typename T, typename U> struct greater;
- template<typename T, typename U> struct less_equal;
- template<typename T, typename U> struct greater_equal;
- template<typename T, typename U> struct equal_to;
- template<typename T, typename U> struct not_equal_to;
- template<typename T, typename U> struct logical_or;
- template<typename T, typename U> struct logical_and;
- template<typename T, typename U> struct bitwise_and;
- template<typename T, typename U> struct bitwise_or;
- template<typename T, typename U> struct bitwise_xor;
- template<typename T, typename U> struct comma;
- template<typename T, typename U> struct mem_ptr;
- template<typename T, typename U> struct assign;
- template<typename T, typename U> struct shift_left_assign;
- template<typename T, typename U> struct shift_right_assign;
- template<typename T, typename U> struct multiplies_assign;
- template<typename T, typename U> struct divides_assign;
- template<typename T, typename U> struct modulus_assign;
- template<typename T, typename U> struct plus_assign;
- template<typename T, typename U> struct minus_assign;
- template<typename T, typename U> struct bitwise_and_assign;
- template<typename T, typename U> struct bitwise_or_assign;
- template<typename T, typename U> struct bitwise_xor_assign;
- template<typename T, typename U> struct subscript;
- template<typename T, typename U> struct member;
- template<typename T, typename U, typename V> struct if_else_;
- template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PROTO_MAX_ARITY, typename A, void)>
- struct function;
- namespace functional
- {
- struct left;
- struct right;
- struct eval;
- struct deep_copy;
- template<typename Domain = default_domain>
- struct as_expr;
- template<typename Domain = default_domain>
- struct as_child;
- template<typename N = mpl::long_<0> >
- struct child;
- template<long N>
- struct child_c;
- struct as_env;
- template<typename Tag>
- struct has_env_var;
- template<typename Tag>
- struct env_var;
- template<typename Tag, typename Domain = deduce_domain>
- struct make_expr;
- template<typename Tag, typename Domain = deduce_domain>
- struct unpack_expr;
- typedef make_expr<tag::terminal> make_terminal;
- typedef make_expr<tag::unary_plus> make_unary_plus;
- typedef make_expr<tag::negate> make_negate;
- typedef make_expr<tag::dereference> make_dereference;
- typedef make_expr<tag::complement> make_complement;
- typedef make_expr<tag::address_of> make_address_of;
- typedef make_expr<tag::logical_not> make_logical_not;
- typedef make_expr<tag::pre_inc> make_pre_inc;
- typedef make_expr<tag::pre_dec> make_pre_dec;
- typedef make_expr<tag::post_inc> make_post_inc;
- typedef make_expr<tag::post_dec> make_post_dec;
- typedef make_expr<tag::shift_left> make_shift_left;
- typedef make_expr<tag::shift_right> make_shift_right;
- typedef make_expr<tag::multiplies> make_multiplies;
- typedef make_expr<tag::divides> make_divides;
- typedef make_expr<tag::modulus> make_modulus;
- typedef make_expr<tag::plus> make_plus;
- typedef make_expr<tag::minus> make_minus;
- typedef make_expr<tag::less> make_less;
- typedef make_expr<tag::greater> make_greater;
- typedef make_expr<tag::less_equal> make_less_equal;
- typedef make_expr<tag::greater_equal> make_greater_equal;
- typedef make_expr<tag::equal_to> make_equal_to;
- typedef make_expr<tag::not_equal_to> make_not_equal_to;
- typedef make_expr<tag::logical_or> make_logical_or;
- typedef make_expr<tag::logical_and> make_logical_and;
- typedef make_expr<tag::bitwise_and> make_bitwise_and;
- typedef make_expr<tag::bitwise_or> make_bitwise_or;
- typedef make_expr<tag::bitwise_xor> make_bitwise_xor;
- typedef make_expr<tag::comma> make_comma;
- typedef make_expr<tag::mem_ptr> make_mem_ptr;
- typedef make_expr<tag::assign> make_assign;
- typedef make_expr<tag::shift_left_assign> make_shift_left_assign;
- typedef make_expr<tag::shift_right_assign> make_shift_right_assign;
- typedef make_expr<tag::multiplies_assign> make_multiplies_assign;
- typedef make_expr<tag::divides_assign> make_divides_assign;
- typedef make_expr<tag::modulus_assign> make_modulus_assign;
- typedef make_expr<tag::plus_assign> make_plus_assign;
- typedef make_expr<tag::minus_assign> make_minus_assign;
- typedef make_expr<tag::bitwise_and_assign> make_bitwise_and_assign;
- typedef make_expr<tag::bitwise_or_assign> make_bitwise_or_assign;
- typedef make_expr<tag::bitwise_xor_assign> make_bitwise_xor_assign;
- typedef make_expr<tag::subscript> make_subscript;
- typedef make_expr<tag::if_else_> make_if_else;
- typedef make_expr<tag::function> make_function;
- struct flatten;
- struct make_pair;
- struct first;
- struct second;
- struct at;
- struct pop_front;
- struct push_front;
- struct pop_back;
- struct push_back;
- struct reverse;
- }
- typedef functional::flatten _flatten;
- typedef functional::make_pair _make_pair;
- typedef functional::first _first;
- typedef functional::second _second;
- typedef functional::at _at;
- typedef functional::pop_front _pop_front;
- typedef functional::push_front _push_front;
- typedef functional::pop_back _pop_back;
- typedef functional::push_back _push_back;
- typedef functional::reverse _reverse;
- typedef functional::eval _eval;
- struct _deep_copy;
- typedef functional::make_expr<tag::terminal> _make_terminal;
- typedef functional::make_expr<tag::unary_plus> _make_unary_plus;
- typedef functional::make_expr<tag::negate> _make_negate;
- typedef functional::make_expr<tag::dereference> _make_dereference;
- typedef functional::make_expr<tag::complement> _make_complement;
- typedef functional::make_expr<tag::address_of> _make_address_of;
- typedef functional::make_expr<tag::logical_not> _make_logical_not;
- typedef functional::make_expr<tag::pre_inc> _make_pre_inc;
- typedef functional::make_expr<tag::pre_dec> _make_pre_dec;
- typedef functional::make_expr<tag::post_inc> _make_post_inc;
- typedef functional::make_expr<tag::post_dec> _make_post_dec;
- typedef functional::make_expr<tag::shift_left> _make_shift_left;
- typedef functional::make_expr<tag::shift_right> _make_shift_right;
- typedef functional::make_expr<tag::multiplies> _make_multiplies;
- typedef functional::make_expr<tag::divides> _make_divides;
- typedef functional::make_expr<tag::modulus> _make_modulus;
- typedef functional::make_expr<tag::plus> _make_plus;
- typedef functional::make_expr<tag::minus> _make_minus;
- typedef functional::make_expr<tag::less> _make_less;
- typedef functional::make_expr<tag::greater> _make_greater;
- typedef functional::make_expr<tag::less_equal> _make_less_equal;
- typedef functional::make_expr<tag::greater_equal> _make_greater_equal;
- typedef functional::make_expr<tag::equal_to> _make_equal_to;
- typedef functional::make_expr<tag::not_equal_to> _make_not_equal_to;
- typedef functional::make_expr<tag::logical_or> _make_logical_or;
- typedef functional::make_expr<tag::logical_and> _make_logical_and;
- typedef functional::make_expr<tag::bitwise_and> _make_bitwise_and;
- typedef functional::make_expr<tag::bitwise_or> _make_bitwise_or;
- typedef functional::make_expr<tag::bitwise_xor> _make_bitwise_xor;
- typedef functional::make_expr<tag::comma> _make_comma;
- typedef functional::make_expr<tag::mem_ptr> _make_mem_ptr;
- typedef functional::make_expr<tag::assign> _make_assign;
- typedef functional::make_expr<tag::shift_left_assign> _make_shift_left_assign;
- typedef functional::make_expr<tag::shift_right_assign> _make_shift_right_assign;
- typedef functional::make_expr<tag::multiplies_assign> _make_multiplies_assign;
- typedef functional::make_expr<tag::divides_assign> _make_divides_assign;
- typedef functional::make_expr<tag::modulus_assign> _make_modulus_assign;
- typedef functional::make_expr<tag::plus_assign> _make_plus_assign;
- typedef functional::make_expr<tag::minus_assign> _make_minus_assign;
- typedef functional::make_expr<tag::bitwise_and_assign> _make_bitwise_and_assign;
- typedef functional::make_expr<tag::bitwise_or_assign> _make_bitwise_or_assign;
- typedef functional::make_expr<tag::bitwise_xor_assign> _make_bitwise_xor_assign;
- typedef functional::make_expr<tag::subscript> _make_subscript;
- typedef functional::make_expr<tag::if_else_> _make_if_else;
- typedef functional::make_expr<tag::function> _make_function;
- template<typename T>
- struct is_callable;
- template<typename T>
- struct is_transform;
- template<typename T>
- struct is_aggregate;
- #define BOOST_PROTO_UNEXPR() typedef int proto_is_expr_;
- #define BOOST_PROTO_CALLABLE() typedef void proto_is_callable_;
- #define BOOST_PROTO_AGGREGATE() typedef void proto_is_aggregate_;
- #define BOOST_PROTO_USE_BASIC_EXPR() typedef void proto_use_basic_expr_;
- struct callable
- {
- BOOST_PROTO_CALLABLE()
- };
- namespace envns_
- {
- struct key_not_found;
- struct empty_env;
- typedef int empty_state;
- template<typename Tag, typename Value, typename Base = empty_env>
- struct env;
- struct data_type;
- struct transforms_type;
- }
- using envns_::key_not_found;
- using envns_::empty_env;
- using envns_::empty_state;
- using envns_::env;
- using envns_::data_type;
- using envns_::transforms_type;
- struct external_transform;
- template<typename PrimitiveTransform = void, typename X = void>
- struct transform;
- template<typename Grammar, typename Fun = Grammar>
- struct when;
- template<typename Fun>
- struct otherwise;
- template<typename Fun>
- struct call;
- template<typename Fun>
- struct make;
- template<typename PrimitiveTransform>
- struct protect;
- template<typename T>
- struct noinvoke;
- template<typename Fun>
- struct lazy;
- template<typename Sequence, typename State, typename Fun>
- struct fold;
- template<typename Sequence, typename State, typename Fun>
- struct reverse_fold;
- // Q: can we replace fold_tree with fold<flatten(_), state, fun> ?
- // A: once segmented Fusion works well.
- template<typename Sequence, typename State, typename Fun>
- struct fold_tree;
- template<typename Sequence, typename State, typename Fun>
- struct reverse_fold_tree;
- template<typename Grammar, typename Domain = deduce_domain>
- struct pass_through;
- template<typename Grammar = detail::_default>
- struct _default;
- struct _expr;
- struct _state;
- struct _data;
- struct _value;
- struct _void;
- template<typename T, T I>
- struct integral_c;
- template<char I>
- struct char_;
- template<int I>
- struct int_;
- template<long I>
- struct long_;
- template<std::size_t I>
- struct size_t;
- template<int I>
- struct _child_c;
- typedef _child_c<0> _child0;
- typedef _child_c<1> _child1;
- typedef _child0 _child;
- typedef _child0 _left;
- typedef _child1 _right;
- // _child2, _child3, _child4, ...
- #define M0(Z, N, DATA) typedef _child_c<N> BOOST_PP_CAT(_child, N);
- BOOST_PP_REPEAT_FROM_TO(
- 2
- , BOOST_PP_DEC(BOOST_PROTO_MAX_ARITY)
- , M0
- , ~
- )
- #undef M0
- struct _byref;
- struct _byval;
- template<typename Tag>
- struct _env_var;
- struct _env;
- template<typename T>
- struct is_extension;
- namespace exops = exprns_;
- }} // namespace boost::proto
- #endif
|