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
);