123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- ///////////////////////////////////////////////////////////////////////////////
- /// \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
|