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/fusion/support/config.hpp>
11 #include <boost/type_traits/is_const.hpp>
12 #include <boost/utility/enable_if.hpp>
13 #include <boost/fusion/support/is_sequence.hpp>
15 namespace boost { namespace fusion
19 template <typename Tag>
22 template <typename Tag>
25 template <typename Tag>
28 template <typename Tag>
31 template <typename Tag>
34 template <typename Tag>
37 template <typename Tag>
40 template <typename Tag>
43 template <typename Tag>
46 template <typename Tag>
47 struct value_at_key_impl;
52 template <typename Sequence, typename N>
55 template <typename Sequence, int N>
58 template <typename Sequence>
61 template <typename Sequence>
64 template <typename Sequence>
67 template <typename Sequence>
70 template <typename Sequence>
73 template <typename Sequence, typename Key>
76 template <typename Sequence>
79 template <typename Sequence>
82 template <typename Sequence, typename N>
85 template <typename Sequence, int N>
88 template <typename Sequence, typename Key>
91 template <typename Sequence, typename N>
95 template <typename N, typename Sequence>
96 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
100 , result_of::at<Sequence, N>
104 template <typename N, typename Sequence>
105 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
106 typename result_of::at<Sequence const, N>::type
107 at(Sequence const& seq);
109 template <int N, typename Sequence>
110 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
114 , result_of::at_c<Sequence, N>
118 template <int N, typename Sequence>
119 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
120 typename result_of::at_c<Sequence const, N>::type
121 at_c(Sequence const& seq);
123 template <typename Sequence>
124 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
125 typename result_of::back<Sequence>::type
128 template <typename Sequence>
129 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
130 typename result_of::back<Sequence const>::type
131 back(Sequence const& seq);
133 template <typename Sequence>
134 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
137 traits::is_sequence<Sequence>
138 , result_of::begin<Sequence>
140 begin(Sequence& seq);
142 template <typename Sequence>
143 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
146 traits::is_sequence<Sequence>
147 , result_of::begin<Sequence const>
149 begin(Sequence const& seq);
151 template <typename Sequence>
152 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
153 typename result_of::empty<Sequence>::type
154 empty(Sequence const&);
156 template <typename Sequence>
157 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
160 traits::is_sequence<Sequence>
161 , result_of::end<Sequence>
165 template <typename Sequence>
166 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
169 traits::is_sequence<Sequence>
170 , result_of::end<Sequence const>
172 end(Sequence const& seq);
174 template <typename Sequence>
175 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
176 typename result_of::front<Sequence>::type
177 front(Sequence& seq);
179 template <typename Sequence>
180 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
181 typename result_of::front<Sequence const>::type
182 front(Sequence const& seq);
184 template <typename Key, typename Sequence>
185 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
186 typename result_of::has_key<Sequence, Key>::type
187 has_key(Sequence const& seq);
189 template <typename Sequence>
190 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
194 , result_of::segments<Sequence>
196 segments(Sequence& seq);
198 template <typename Sequence>
199 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
200 typename result_of::segments<Sequence const>::type
201 segments(Sequence const& seq);
203 template <typename Sequence>
204 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
205 typename result_of::size<Sequence>::type
206 size(Sequence const&);
208 template <typename Key, typename Sequence>
209 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
213 , result_of::at_key<Sequence, Key>
215 at_key(Sequence& seq);
217 template <typename Key, typename Sequence>
218 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
219 typename result_of::at_key<Sequence const, Key>::type
220 at_key(Sequence const& seq);