annotate DEPENDENCIES/generic/include/boost/fusion/adapted/struct/detail/define_struct.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 /*=============================================================================
Chris@16 2 Copyright (c) 2010-2011 Christopher Schmidt
Chris@16 3
Chris@16 4 Distributed under the Boost Software License, Version 1.0. (See accompanying
Chris@16 5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 6 ==============================================================================*/
Chris@16 7
Chris@16 8 #ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_DEFINE_STRUCT_HPP
Chris@16 9 #define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_DEFINE_STRUCT_HPP
Chris@16 10
Chris@101 11 #include <boost/fusion/support/config.hpp>
Chris@16 12 #include <boost/config.hpp>
Chris@16 13 #include <boost/fusion/sequence/intrinsic/begin.hpp>
Chris@16 14 #include <boost/fusion/iterator/deref.hpp>
Chris@16 15 #include <boost/fusion/iterator/next.hpp>
Chris@16 16 #include <boost/fusion/iterator/advance.hpp>
Chris@16 17 #include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
Chris@16 18 #include <boost/fusion/adapted/struct/detail/namespace.hpp>
Chris@16 19 #include <boost/preprocessor/inc.hpp>
Chris@16 20 #include <boost/preprocessor/if.hpp>
Chris@16 21 #include <boost/preprocessor/expr_if.hpp>
Chris@16 22 #include <boost/preprocessor/dec.hpp>
Chris@16 23 #include <boost/preprocessor/logical/not.hpp>
Chris@16 24 #include <boost/preprocessor/punctuation/comma_if.hpp>
Chris@16 25 #include <boost/preprocessor/comparison/equal.hpp>
Chris@16 26 #include <boost/preprocessor/seq/seq.hpp>
Chris@16 27 #include <boost/preprocessor/seq/for_each.hpp>
Chris@16 28 #include <boost/preprocessor/seq/for_each_i.hpp>
Chris@16 29 #include <boost/preprocessor/seq/enum.hpp>
Chris@16 30 #include <boost/preprocessor/seq/size.hpp>
Chris@16 31 #include <boost/preprocessor/tuple/elem.hpp>
Chris@16 32 #include <boost/preprocessor/tuple/eat.hpp>
Chris@16 33 #include <boost/call_traits.hpp>
Chris@16 34 #include <boost/type_traits/is_convertible.hpp>
Chris@16 35 #include <boost/utility/enable_if.hpp>
Chris@16 36
Chris@101 37 #define BOOST_FUSION_DEFINE_STRUCT_FILLER_0(X, Y) \
Chris@101 38 ((X, Y)) BOOST_FUSION_DEFINE_STRUCT_FILLER_1
Chris@101 39 #define BOOST_FUSION_DEFINE_STRUCT_FILLER_1(X, Y) \
Chris@101 40 ((X, Y)) BOOST_FUSION_DEFINE_STRUCT_FILLER_0
Chris@101 41 #define BOOST_FUSION_DEFINE_STRUCT_FILLER_0_END
Chris@101 42 #define BOOST_FUSION_DEFINE_STRUCT_FILLER_1_END
Chris@101 43
Chris@16 44 #define BOOST_FUSION_DEFINE_STRUCT_COPY_CTOR_FILLER_I( \
Chris@16 45 R, ATTRIBUTE_TUPEL_SIZE, I, ATTRIBUTE) \
Chris@16 46 \
Chris@16 47 BOOST_PP_COMMA_IF(I) \
Chris@16 48 BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE)( \
Chris@16 49 other_self.BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE))
Chris@16 50
Chris@16 51 #define BOOST_FUSION_DEFINE_STRUCT_ASSIGN_FILLER_I( \
Chris@16 52 R, ATTRIBUTE_TUPEL_SIZE, I_, ATTRIBUTE) \
Chris@16 53 \
Chris@16 54 BOOST_PP_EXPR_IF( \
Chris@16 55 I_, \
Chris@16 56 typedef typename \
Chris@16 57 boost::fusion::result_of::next< \
Chris@16 58 BOOST_PP_CAT(I,BOOST_PP_DEC(I_)) \
Chris@16 59 >::type \
Chris@16 60 BOOST_PP_CAT(I,I_); \
Chris@16 61 BOOST_PP_CAT(I,I_) BOOST_PP_CAT(i,I_)= \
Chris@16 62 boost::fusion::next(BOOST_PP_CAT(i,BOOST_PP_DEC(I_))); \
Chris@16 63 ) \
Chris@16 64 \
Chris@16 65 BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE)= \
Chris@16 66 boost::fusion::deref(BOOST_PP_CAT(i,I_));
Chris@16 67
Chris@16 68 #define BOOST_FUSION_DEFINE_STRUCT_ASSIGN_OP( \
Chris@16 69 ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
Chris@16 70 \
Chris@16 71 template<typename Seq> \
Chris@101 72 BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
Chris@16 73 self_type& \
Chris@16 74 operator=(Seq const& seq) \
Chris@16 75 { \
Chris@16 76 typedef typename \
Chris@16 77 boost::fusion::result_of::begin<Seq const>::type \
Chris@16 78 I0; \
Chris@16 79 I0 i0=boost::fusion::begin(seq); \
Chris@16 80 \
Chris@16 81 BOOST_PP_SEQ_FOR_EACH_I_R( \
Chris@16 82 1, \
Chris@16 83 BOOST_FUSION_DEFINE_STRUCT_ASSIGN_FILLER_I, \
Chris@16 84 ATTRIBUTE_TUPEL_SIZE, \
Chris@16 85 ATTRIBUTES_SEQ) \
Chris@16 86 \
Chris@16 87 return *this; \
Chris@16 88 }
Chris@16 89
Chris@16 90 #define BOOST_FUSION_DEFINE_STRUCT_ATTR_I(R, ATTRIBUTE_TUPEL_SIZE, ATTRIBUTE) \
Chris@16 91 \
Chris@16 92 BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,0,ATTRIBUTE) \
Chris@16 93 BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE);
Chris@16 94
Chris@16 95 #define BOOST_FUSION_DEFINE_STRUCT_SEQ_CTOR_FILLER_I( \
Chris@16 96 R, ATTRIBUTE_TUPEL_SIZE, I, ATTRIBUTE) \
Chris@16 97 \
Chris@16 98 BOOST_PP_COMMA_IF(I) \
Chris@16 99 BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE)( \
Chris@16 100 boost::fusion::deref(boost::fusion::advance_c<I>(boost::fusion::begin( \
Chris@16 101 seq))))
Chris@16 102
Chris@16 103 #define BOOST_FUSION_DEFINE_STRUCT_SEQ_CTOR_DISABLER( \
Chris@16 104 ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
Chris@16 105 \
Chris@16 106 , typename boost::disable_if< \
Chris@16 107 boost::is_convertible< \
Chris@16 108 Seq const& \
Chris@16 109 , BOOST_PP_TUPLE_ELEM( \
Chris@16 110 ATTRIBUTE_TUPEL_SIZE, \
Chris@16 111 0, \
Chris@16 112 BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ)) \
Chris@16 113 > \
Chris@16 114 >::type* =0
Chris@16 115
Chris@16 116 #define BOOST_FUSION_DEFINE_STRUCT_SEQ_DEFAULT_CTOR_FILLER_I( \
Chris@16 117 R, ATTRIBUTE_TUPEL_SIZE, I, ATTRIBUTE) \
Chris@16 118 \
Chris@16 119 BOOST_PP_COMMA_IF(I) \
Chris@16 120 BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE)()
Chris@16 121
Chris@16 122 #define BOOST_FUSION_DEFINE_STRUCT_IMPL_IMPL( \
Chris@16 123 NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
Chris@16 124 \
Chris@16 125 BOOST_PP_SEQ_FOR_EACH_R( \
Chris@16 126 1, \
Chris@16 127 BOOST_FUSION_DEFINE_STRUCT_ATTR_I, \
Chris@16 128 ATTRIBUTE_TUPEL_SIZE, \
Chris@16 129 ATTRIBUTES_SEQ) \
Chris@16 130 \
Chris@101 131 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
Chris@16 132 NAME() \
Chris@16 133 : BOOST_PP_SEQ_FOR_EACH_I_R( \
Chris@16 134 1, \
Chris@16 135 BOOST_FUSION_DEFINE_STRUCT_SEQ_DEFAULT_CTOR_FILLER_I, \
Chris@16 136 ATTRIBUTE_TUPEL_SIZE, \
Chris@16 137 ATTRIBUTES_SEQ) \
Chris@16 138 {} \
Chris@16 139 \
Chris@101 140 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
Chris@16 141 NAME(self_type const& other_self) \
Chris@16 142 : BOOST_PP_SEQ_FOR_EACH_I_R( \
Chris@16 143 1, \
Chris@16 144 BOOST_FUSION_DEFINE_STRUCT_COPY_CTOR_FILLER_I, \
Chris@16 145 ATTRIBUTE_TUPEL_SIZE, \
Chris@16 146 ATTRIBUTES_SEQ) \
Chris@16 147 {} \
Chris@16 148 \
Chris@16 149 template<typename Seq> \
Chris@101 150 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
Chris@16 151 NAME(Seq const& seq \
Chris@16 152 BOOST_PP_IF( \
Chris@16 153 BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \
Chris@16 154 BOOST_PP_TUPLE_EAT(2), \
Chris@16 155 BOOST_FUSION_DEFINE_STRUCT_SEQ_CTOR_DISABLER)( \
Chris@16 156 ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
Chris@16 157 ) \
Chris@16 158 : BOOST_PP_SEQ_FOR_EACH_I_R( \
Chris@16 159 1, \
Chris@16 160 BOOST_FUSION_DEFINE_STRUCT_SEQ_CTOR_FILLER_I, \
Chris@16 161 ATTRIBUTE_TUPEL_SIZE, \
Chris@16 162 ATTRIBUTES_SEQ) \
Chris@16 163 {} \
Chris@16 164 \
Chris@16 165 BOOST_FUSION_DEFINE_STRUCT_ASSIGN_OP(ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)
Chris@16 166
Chris@16 167 #define BOOST_FUSION_DEFINE_STRUCT_CTOR_1( \
Chris@16 168 NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
Chris@16 169 \
Chris@101 170 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
Chris@16 171 explicit \
Chris@16 172 NAME(boost::call_traits< \
Chris@16 173 BOOST_PP_TUPLE_ELEM( \
Chris@16 174 ATTRIBUTE_TUPEL_SIZE,0,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ)) \
Chris@16 175 >::param_type arg) \
Chris@16 176 : BOOST_PP_TUPLE_ELEM( \
Chris@16 177 ATTRIBUTE_TUPEL_SIZE,1,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ))(arg) \
Chris@16 178 {}
Chris@16 179
Chris@16 180 #define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_1( \
Chris@16 181 TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
Chris@16 182 \
Chris@101 183 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
Chris@16 184 explicit \
Chris@16 185 NAME(typename boost::call_traits< \
Chris@16 186 typename boost::fusion::detail::get_first_arg< \
Chris@16 187 BOOST_PP_TUPLE_ELEM( \
Chris@16 188 ATTRIBUTE_TUPEL_SIZE, \
Chris@16 189 0, \
Chris@16 190 BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ)) \
Chris@16 191 , BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ) \
Chris@16 192 >::type \
Chris@16 193 >::param_type arg) \
Chris@16 194 : BOOST_PP_TUPLE_ELEM( \
Chris@16 195 ATTRIBUTE_TUPEL_SIZE,1,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ))(arg) \
Chris@16 196 {}
Chris@16 197
Chris@16 198 #define BOOST_FUSION_DEFINE_STRUCT_CTOR_FILLER_I( \
Chris@16 199 R, ATTRIBUTE_TUPEL_SIZE, I, ATTRIBUTE) \
Chris@16 200 \
Chris@16 201 BOOST_PP_COMMA_IF(I) \
Chris@16 202 BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE)(BOOST_PP_CAT(_,I))
Chris@16 203
Chris@16 204 #define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_ARG_I(R, DATA, I, ATTRIBUTE) \
Chris@16 205 \
Chris@16 206 BOOST_PP_COMMA_IF(I) \
Chris@16 207 typename boost::call_traits< \
Chris@16 208 typename boost::fusion::detail::get_first_arg< \
Chris@16 209 BOOST_PP_TUPLE_ELEM( \
Chris@16 210 BOOST_PP_TUPLE_ELEM(3,0,DATA), \
Chris@16 211 0, \
Chris@16 212 ATTRIBUTE) \
Chris@16 213 , BOOST_PP_TUPLE_ELEM(3,2,DATA) \
Chris@16 214 >::type \
Chris@16 215 >::param_type BOOST_PP_CAT(_,I)
Chris@16 216
Chris@16 217 #define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_N( \
Chris@16 218 TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
Chris@16 219 \
Chris@101 220 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
Chris@16 221 NAME(BOOST_PP_SEQ_FOR_EACH_I_R( \
Chris@16 222 1, \
Chris@16 223 BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_ARG_I, \
Chris@16 224 ( \
Chris@16 225 ATTRIBUTE_TUPEL_SIZE, \
Chris@16 226 BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ), \
Chris@16 227 BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ) \
Chris@16 228 ), \
Chris@16 229 ATTRIBUTES_SEQ)) \
Chris@16 230 : BOOST_PP_SEQ_FOR_EACH_I_R( \
Chris@16 231 1, \
Chris@16 232 BOOST_FUSION_DEFINE_STRUCT_CTOR_FILLER_I, \
Chris@16 233 ATTRIBUTE_TUPEL_SIZE, \
Chris@16 234 ATTRIBUTES_SEQ) \
Chris@16 235 {}
Chris@16 236
Chris@16 237 #define BOOST_FUSION_DEFINE_STRUCT_CTOR_ARG_I( \
Chris@16 238 R, ATTRIBUTE_TUPEL_SIZE, I, ATTRIBUTE) \
Chris@16 239 \
Chris@16 240 BOOST_PP_COMMA_IF(I) \
Chris@16 241 boost::call_traits< \
Chris@16 242 BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,0,ATTRIBUTE) \
Chris@16 243 >::param_type BOOST_PP_CAT(_,I)
Chris@16 244
Chris@16 245 #define BOOST_FUSION_DEFINE_STRUCT_CTOR_N( \
Chris@16 246 NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
Chris@16 247 \
Chris@101 248 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
Chris@16 249 NAME(BOOST_PP_SEQ_FOR_EACH_I_R( \
Chris@16 250 1, \
Chris@16 251 BOOST_FUSION_DEFINE_STRUCT_CTOR_ARG_I, \
Chris@16 252 ATTRIBUTE_TUPEL_SIZE, \
Chris@16 253 ATTRIBUTES_SEQ)) \
Chris@16 254 : BOOST_PP_SEQ_FOR_EACH_I_R( \
Chris@16 255 1, \
Chris@16 256 BOOST_FUSION_DEFINE_STRUCT_CTOR_FILLER_I, \
Chris@16 257 ATTRIBUTE_TUPEL_SIZE, \
Chris@16 258 ATTRIBUTES_SEQ) \
Chris@16 259 {}
Chris@16 260
Chris@16 261 #define BOOST_FUSION_DEFINE_STRUCT_CTOR( \
Chris@16 262 NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
Chris@16 263 \
Chris@16 264 BOOST_PP_IF(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \
Chris@16 265 BOOST_FUSION_DEFINE_STRUCT_CTOR_N, \
Chris@16 266 BOOST_FUSION_DEFINE_STRUCT_CTOR_1)( \
Chris@16 267 NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)
Chris@16 268
Chris@16 269 #define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR( \
Chris@16 270 TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
Chris@16 271 \
Chris@16 272 BOOST_PP_IF(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \
Chris@16 273 BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_N, \
Chris@16 274 BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_1)( \
Chris@16 275 TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)
Chris@16 276
Chris@16 277 #define BOOST_FUSION_DEFINE_NONEMPTY_STRUCT_IMPL( \
Chris@16 278 NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
Chris@16 279 \
Chris@16 280 BOOST_FUSION_DEFINE_STRUCT_IMPL_IMPL( \
Chris@16 281 NAME, BOOST_PP_SEQ_TAIL(ATTRIBUTES_SEQ), ATTRIBUTE_TUPEL_SIZE) \
Chris@16 282 \
Chris@16 283 BOOST_FUSION_DEFINE_STRUCT_CTOR( \
Chris@16 284 NAME, BOOST_PP_SEQ_TAIL(ATTRIBUTES_SEQ), ATTRIBUTE_TUPEL_SIZE)
Chris@16 285
Chris@16 286 #define BOOST_FUSION_DEFINE_EMPTY_STRUCT_IMPL( \
Chris@16 287 NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
Chris@16 288 \
Chris@16 289 template<typename Seq> \
Chris@101 290 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
Chris@16 291 NAME(Seq const&) \
Chris@16 292 {} \
Chris@16 293 \
Chris@16 294 template<typename Seq> \
Chris@101 295 BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
Chris@16 296 self_type& \
Chris@16 297 operator=(Seq const& seq) \
Chris@16 298 { \
Chris@16 299 return *this; \
Chris@16 300 }
Chris@16 301
Chris@16 302 #define BOOST_FUSION_DEFINE_STRUCT_IMPL( \
Chris@16 303 NAMESPACE_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
Chris@16 304 \
Chris@16 305 BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_BEGIN(NAMESPACE_SEQ) \
Chris@16 306 \
Chris@16 307 struct NAME \
Chris@16 308 { \
Chris@16 309 typedef NAME self_type; \
Chris@16 310 \
Chris@16 311 BOOST_PP_IF(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \
Chris@16 312 BOOST_FUSION_DEFINE_NONEMPTY_STRUCT_IMPL, \
Chris@16 313 BOOST_FUSION_DEFINE_EMPTY_STRUCT_IMPL)( \
Chris@16 314 NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
Chris@16 315 }; \
Chris@16 316 \
Chris@16 317 BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_END(NAMESPACE_SEQ)
Chris@16 318
Chris@16 319 #define BOOST_FUSION_DEFINE_NONEMPTY_TPL_STRUCT_IMPL( \
Chris@16 320 TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
Chris@16 321 \
Chris@16 322 BOOST_FUSION_DEFINE_STRUCT_IMPL_IMPL( \
Chris@16 323 NAME, BOOST_PP_SEQ_TAIL(ATTRIBUTES_SEQ), ATTRIBUTE_TUPEL_SIZE) \
Chris@16 324 \
Chris@16 325 BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR( \
Chris@16 326 TEMPLATE_PARAMS_SEQ, \
Chris@16 327 NAME, \
Chris@16 328 BOOST_PP_SEQ_TAIL(ATTRIBUTES_SEQ), \
Chris@16 329 ATTRIBUTE_TUPEL_SIZE)
Chris@16 330
Chris@16 331 #define BOOST_FUSION_DEFINE_EMPTY_TPL_STRUCT_IMPL( \
Chris@16 332 TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
Chris@16 333 \
Chris@16 334 BOOST_FUSION_DEFINE_EMPTY_STRUCT_IMPL( \
Chris@16 335 NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)
Chris@16 336
Chris@16 337 #define BOOST_FUSION_DEFINE_TPL_STRUCT_IMPL( \
Chris@16 338 TEMPLATE_PARAMS_SEQ, \
Chris@16 339 NAMESPACE_SEQ, \
Chris@16 340 NAME, \
Chris@16 341 ATTRIBUTES_SEQ, \
Chris@16 342 ATTRIBUTE_TUPEL_SIZE) \
Chris@16 343 \
Chris@16 344 BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_BEGIN(NAMESPACE_SEQ) \
Chris@16 345 \
Chris@16 346 template< \
Chris@16 347 BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS_IMPL( \
Chris@16 348 (0)TEMPLATE_PARAMS_SEQ) \
Chris@16 349 > \
Chris@16 350 struct NAME \
Chris@16 351 { \
Chris@16 352 typedef NAME self_type; \
Chris@16 353 \
Chris@16 354 BOOST_PP_IF(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \
Chris@16 355 BOOST_FUSION_DEFINE_NONEMPTY_TPL_STRUCT_IMPL, \
Chris@16 356 BOOST_FUSION_DEFINE_EMPTY_TPL_STRUCT_IMPL)( \
Chris@16 357 TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)\
Chris@16 358 }; \
Chris@16 359 \
Chris@16 360 BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_END(NAMESPACE_SEQ)
Chris@16 361
Chris@16 362 namespace boost { namespace fusion { namespace detail
Chris@16 363 {
Chris@16 364 template<typename A1, typename A2>
Chris@16 365 struct get_first_arg
Chris@16 366 {
Chris@16 367 typedef A1 type;
Chris@16 368 };
Chris@16 369 }}}
Chris@16 370
Chris@16 371 #endif