1 /*=============================================================================
2 Copyright (c) 2001-2011 Joel de Guzman
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 ==============================================================================*/
7 #if !defined(BOOST_FUSION_SEQUENCE_INTRINSIC_FWD_HPP_INCLUDED)
8 #define BOOST_FUSION_SEQUENCE_INTRINSIC_FWD_HPP_INCLUDED
10 #include <boost/type_traits/is_const.hpp>
11 #include <boost/utility/enable_if.hpp>
12 #include <boost/fusion/support/is_sequence.hpp>
14 namespace boost { namespace fusion
18 template <typename Tag>
21 template <typename Tag>
24 template <typename Tag>
27 template <typename Tag>
30 template <typename Tag>
33 template <typename Tag>
36 template <typename Tag>
39 template <typename Tag>
42 template <typename Tag>
45 template <typename Tag>
46 struct value_at_key_impl;
51 template <typename Sequence, typename N>
54 template <typename Sequence, int N>
57 template <typename Sequence>
60 template <typename Sequence>
63 template <typename Sequence>
66 template <typename Sequence>
69 template <typename Sequence>
72 template <typename Sequence, typename Key>
75 template <typename Sequence>
78 template <typename Sequence>
81 template <typename Sequence, typename N>
84 template <typename Sequence, int N>
87 template <typename Sequence, typename Key>
90 template <typename Sequence, typename N>
94 template <typename N, typename Sequence>
98 , result_of::at<Sequence, N>
102 template <typename N, typename Sequence>
103 typename result_of::at<Sequence const, N>::type
104 at(Sequence const& seq);
106 template <int N, typename Sequence>
110 , result_of::at_c<Sequence, N>
114 template <int N, typename Sequence>
115 typename result_of::at_c<Sequence const, N>::type
116 at_c(Sequence const& seq);
118 template <typename Sequence>
119 typename result_of::back<Sequence>::type
122 template <typename Sequence>
123 typename result_of::back<Sequence const>::type
124 back(Sequence const& seq);
126 template <typename Sequence>
129 traits::is_sequence<Sequence>
130 , result_of::begin<Sequence>
132 begin(Sequence& seq);
134 template <typename Sequence>
137 traits::is_sequence<Sequence>
138 , result_of::begin<Sequence const>
140 begin(Sequence const& seq);
142 template <typename Sequence>
143 typename result_of::empty<Sequence>::type
144 empty(Sequence const&);
146 template <typename Sequence>
149 traits::is_sequence<Sequence>
150 , result_of::end<Sequence>
154 template <typename Sequence>
157 traits::is_sequence<Sequence>
158 , result_of::end<Sequence const>
160 end(Sequence const& seq);
162 template <typename Sequence>
163 typename result_of::front<Sequence>::type
164 front(Sequence& seq);
166 template <typename Sequence>
167 typename result_of::front<Sequence const>::type
168 front(Sequence const& seq);
170 template <typename Key, typename Sequence>
171 typename result_of::has_key<Sequence, Key>::type
172 has_key(Sequence const& seq);
174 template <typename Sequence>
178 , result_of::segments<Sequence>
180 segments(Sequence& seq);
182 template <typename Sequence>
183 typename result_of::segments<Sequence const>::type
184 segments(Sequence const& seq);
186 template <typename Sequence>
187 typename result_of::size<Sequence>::type
188 size(Sequence const&);
190 template <typename Key, typename Sequence>
194 , result_of::at_key<Sequence, Key>
196 at_key(Sequence& seq);
198 template <typename Key, typename Sequence>
199 typename result_of::at_key<Sequence const, Key>::type
200 at_key(Sequence const& seq);