map_forward_ctor.hpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*=============================================================================
  2. Copyright (c) 2001-2011 Joel de Guzman
  3. Distributed under the Boost Software License, Version 1.0. (See accompanying
  4. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  5. ==============================================================================*/
  6. #ifndef BOOST_PP_IS_ITERATING
  7. #if !defined(FUSION_MAP_FORWARD_CTOR_07222005_0106)
  8. #define FUSION_MAP_FORWARD_CTOR_07222005_0106
  9. #define FUSION_FORWARD_CTOR_FORWARD(z, n, _) BOOST_FUSION_FWD_ELEM(U##n, _##n)
  10. #define BOOST_PP_FILENAME_1 \
  11. <boost/fusion/container/map/detail/cpp03/map_forward_ctor.hpp>
  12. #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_MAP_SIZE)
  13. #include BOOST_PP_ITERATE()
  14. #undef FUSION_FORWARD_CTOR_FORWARD
  15. #endif
  16. #else // defined(BOOST_PP_IS_ITERATING)
  17. ///////////////////////////////////////////////////////////////////////////////
  18. //
  19. // Preprocessor vertical repetition code
  20. //
  21. ///////////////////////////////////////////////////////////////////////////////
  22. #define N BOOST_PP_ITERATION()
  23. BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
  24. #if N == 1
  25. explicit
  26. #endif
  27. map(BOOST_PP_ENUM_BINARY_PARAMS(N, typename detail::call_param<T, >::type arg))
  28. : data(BOOST_PP_ENUM_PARAMS(N, arg)) {}
  29. #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
  30. FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
  31. #endif
  32. #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \
  33. (defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
  34. template <BOOST_PP_ENUM_PARAMS(N, typename U)>
  35. BOOST_FUSION_GPU_ENABLED
  36. #if N == 1
  37. explicit
  38. #endif
  39. map(BOOST_PP_ENUM_BINARY_PARAMS(N, U, && arg)
  40. #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) && \
  41. N == 1
  42. // workaround for MSVC 10
  43. FUSION_HASH if defined(BOOST_MSVC) && (BOOST_MSVC == 1700)
  44. , typename enable_if<is_same<U0, T0> >::type* = 0
  45. FUSION_HASH endif
  46. #endif
  47. )
  48. : data(BOOST_PP_ENUM(N, FUSION_FORWARD_CTOR_FORWARD, arg)) {}
  49. #endif
  50. #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
  51. FUSION_HASH endif
  52. #endif
  53. #undef N
  54. #endif // defined(BOOST_PP_IS_ITERATING)