1 ///////////////////////////////////////////////////////////////////////////////
2 /// \file xpressive_typeof.hpp
3 /// Type registrations so that xpressive can be used with the Boost.Typeof library.
5 // Copyright 2008 Eric Niebler. Distributed under the Boost
6 // Software License, Version 1.0. (See accompanying file
7 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9 #ifndef BOOST_XPRESSIVE_XPRESSIVE_TYPEOF_H
10 #define BOOST_XPRESSIVE_XPRESSIVE_TYPEOF_H
12 // MS compatible compilers support #pragma once
13 #if defined(_MSC_VER) && (_MSC_VER >= 1020)
17 #include <boost/config.hpp>
18 #include <boost/typeof/typeof.hpp>
19 #ifndef BOOST_NO_STL_LOCALE
20 # include <boost/typeof/std/locale.hpp>
22 #include <boost/proto/proto_typeof.hpp>
23 #include <boost/xpressive/detail/detail_fwd.hpp>
25 #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
27 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::mpl::bool_
, (bool))
29 ///////////////////////////////////////////////////////////////////////////////
32 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::set_initializer
)
33 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::keeper_tag
)
34 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::modifier_tag
)
35 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::lookahead_tag
)
36 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::lookbehind_tag
)
37 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::check_tag
)
38 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::mark_tag
)
39 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::word_begin
)
40 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::word_end
)
41 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::generic_quant_tag
, (unsigned int)(unsigned int))
42 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::basic_regex
, (typename
))
43 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::word_boundary
, (typename
))
44 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::value
, (typename
))
45 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::reference
, (typename
))
46 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::local
, (typename
))
47 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::placeholder
, (typename
)(int)(typename
))
48 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::tracking_ptr
, (typename
))
49 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::regex_impl
, (typename
))
50 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::let_
, (typename
))
51 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::action_arg
, (typename
)(typename
))
52 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::named_mark
, (typename
))
53 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::sub_match
, (typename
))
54 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::nested_results
, (typename
))
56 ///////////////////////////////////////////////////////////////////////////////
59 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::mark_placeholder
)
60 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::posix_charset_placeholder
)
61 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::assert_bol_placeholder
)
62 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::assert_eol_placeholder
)
63 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::logical_newline_placeholder
)
64 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::self_placeholder
)
65 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::assert_word_placeholder
, (typename
))
66 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::range_placeholder
, (typename
))
67 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::attribute_placeholder
, (typename
))
69 ///////////////////////////////////////////////////////////////////////////////
72 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::epsilon_matcher
)
73 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::true_matcher
)
74 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::end_matcher
)
75 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::independent_end_matcher
)
76 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::any_matcher
)
77 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::assert_bos_matcher
)
78 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::assert_eos_matcher
)
79 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::mark_begin_matcher
)
80 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::mark_end_matcher
)
81 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::repeat_begin_matcher
)
82 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::alternate_end_matcher
)
83 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::attr_end_matcher
)
84 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::assert_bol_matcher
, (typename
))
85 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::assert_eol_matcher
, (typename
))
86 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::literal_matcher
, (typename
)(typename
)(typename
))
87 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::string_matcher
, (typename
)(typename
))
88 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::charset_matcher
, (typename
)(typename
)(typename
))
89 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::logical_newline_matcher
, (typename
))
90 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::mark_matcher
, (typename
)(typename
))
91 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::repeat_end_matcher
, (typename
))
92 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::alternate_matcher
, (typename
)(typename
))
93 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::optional_matcher
, (typename
)(typename
))
94 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::optional_mark_matcher
, (typename
)(typename
))
95 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::simple_repeat_matcher
, (typename
)(typename
))
96 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::regex_byref_matcher
, (typename
))
97 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::regex_matcher
, (typename
))
98 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::posix_charset_matcher
, (typename
))
99 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::assert_word_matcher
, (typename
)(typename
))
100 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::range_matcher
, (typename
)(typename
))
101 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::keeper_matcher
, (typename
))
102 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::lookahead_matcher
, (typename
))
103 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::lookbehind_matcher
, (typename
))
104 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::set_matcher
, (typename
)(typename
))
105 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::predicate_matcher
, (typename
))
106 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::action_matcher
, (typename
))
107 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::attr_matcher
, (typename
)(typename
)(typename
))
108 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::attr_begin_matcher
, (typename
))
110 ///////////////////////////////////////////////////////////////////////////////
113 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::push
)
114 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::push_back
)
115 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::pop
)
116 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::push_front
)
117 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::pop_back
)
118 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::pop_front
)
119 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::back
)
120 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::front
)
121 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::top
)
122 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::first
)
123 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::second
)
124 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::matched
)
125 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::length
)
126 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::str
)
127 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::insert
)
128 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::make_pair
)
129 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::op::as
, (typename
))
130 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::op::static_cast_
, (typename
))
131 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::op::dynamic_cast_
, (typename
))
132 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::op::const_cast_
, (typename
))
133 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::op::construct
, (typename
))
134 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::op::throw_
, (typename
))
136 ///////////////////////////////////////////////////////////////////////////////
139 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::icase_modifier
)
140 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::locale_modifier
, (typename
))
142 ///////////////////////////////////////////////////////////////////////////////
145 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::null_regex_traits
, (typename
))
146 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::cpp_regex_traits
, (typename
))
147 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::c_regex_traits
, (typename
))
148 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::regex_traits
, (typename
)(typename
))