| /////////////////////////////////////////////////////////////////////////////// |
| /// \file proto_typeof.hpp |
| /// Type registrations so that proto expression templates can be used together |
| /// with the Boost.Typeof library. |
| // |
| // 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_XPRESSIVE_PROTO_PROTO_TYPEOF_H |
| #define BOOST_XPRESSIVE_PROTO_PROTO_TYPEOF_H |
| |
| #include <boost/config.hpp> |
| #include <boost/typeof/typeof.hpp> |
| #include <boost/proto/proto_fwd.hpp> |
| #include <boost/proto/deep_copy.hpp> |
| #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP() |
| |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::terminal) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::unary_plus) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::negate) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::dereference) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::complement) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::address_of) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::logical_not) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::pre_inc) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::pre_dec) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::post_inc) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::post_dec) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::shift_left) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::shift_right) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::multiplies) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::divides) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::modulus) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::plus) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::minus) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::less) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::greater) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::less_equal) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::greater_equal) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::equal_to) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::not_equal_to) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::logical_or) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::logical_and) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::bitwise_and) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::bitwise_or) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::bitwise_xor) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::comma) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::mem_ptr) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::assign) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::shift_left_assign) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::shift_right_assign) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::multiplies_assign) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::divides_assign) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::modulus_assign) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::plus_assign) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::minus_assign) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::bitwise_and_assign) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::bitwise_or_assign) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::bitwise_xor_assign) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::subscript) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::member) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::if_else_) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::tag::function) |
| |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::exprns_::is_proto_expr) |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::exprns_::expr, (typename)(typename)(long)) |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::exprns_::basic_expr, (typename)(typename)(long)) |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::utility::literal, (typename)(typename)) |
| |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::detail::not_a_generator) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::detail::not_a_grammar) |
| BOOST_TYPEOF_REGISTER_TYPE(boost::proto::detail::not_a_domain) |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::domain, 3) |
| |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::term, 1) |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list1, 1) |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list2, 2) |
| // can't use PP metaprogramming here because all typeof registrations |
| // must be on separate lines. |
| #if BOOST_PROTO_MAX_ARITY >= 3 |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list3, 3) |
| #endif |
| #if BOOST_PROTO_MAX_ARITY >= 4 |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list4, 4) |
| #endif |
| #if BOOST_PROTO_MAX_ARITY >= 5 |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list5, 5) |
| #endif |
| #if BOOST_PROTO_MAX_ARITY >= 6 |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list6, 6) |
| #endif |
| #if BOOST_PROTO_MAX_ARITY >= 7 |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list7, 7) |
| #endif |
| #if BOOST_PROTO_MAX_ARITY >= 8 |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list8, 8) |
| #endif |
| #if BOOST_PROTO_MAX_ARITY >= 9 |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list9, 9) |
| #endif |
| #if BOOST_PROTO_MAX_ARITY >= 10 |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list10, 10) |
| #endif |
| #if BOOST_PROTO_MAX_ARITY >= 11 |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list11, 11) |
| #endif |
| #if BOOST_PROTO_MAX_ARITY >= 12 |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list12, 12) |
| #endif |
| #if BOOST_PROTO_MAX_ARITY >= 13 |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list13, 13) |
| #endif |
| #if BOOST_PROTO_MAX_ARITY >= 14 |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list14, 14) |
| #endif |
| #if BOOST_PROTO_MAX_ARITY >= 15 |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list15, 15) |
| #endif |
| #if BOOST_PROTO_MAX_ARITY >= 16 |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list16, 16) |
| #endif |
| #if BOOST_PROTO_MAX_ARITY >= 17 |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list17, 17) |
| #endif |
| #if BOOST_PROTO_MAX_ARITY >= 18 |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list18, 18) |
| #endif |
| #if BOOST_PROTO_MAX_ARITY >= 19 |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list19, 19) |
| #endif |
| #if BOOST_PROTO_MAX_ARITY >= 20 |
| BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::list20, 20) |
| #endif |
| |
| #define BOOST_PROTO_AUTO(Var, Expr) BOOST_AUTO(Var, boost::proto::deep_copy(Expr)) |
| #define BOOST_PROTO_AUTO_TPL(Var, Expr) BOOST_AUTO_TPL(Var, boost::proto::deep_copy(Expr)) |
| |
| #endif |