vector_forward_ctor.hpp 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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_VECTOR_FORWARD_CTOR_07122005_1123)
  8. #define FUSION_VECTOR_FORWARD_CTOR_07122005_1123
  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/vector/detail/cpp03/vector_forward_ctor.hpp>
  12. #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_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 M BOOST_PP_ITERATION()
  23. // XXX:
  24. #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
  25. FUSION_HASH if !defined(BOOST_CLANG)
  26. BOOST_CONSTEXPR
  27. FUSION_HASH endif
  28. #else
  29. #if !defined(BOOST_CLANG)
  30. BOOST_CONSTEXPR
  31. #endif
  32. #endif
  33. BOOST_FUSION_GPU_ENABLED
  34. #if M == 1
  35. explicit
  36. #endif
  37. vector(BOOST_PP_ENUM_BINARY_PARAMS(
  38. M, typename detail::call_param<T, >::type arg))
  39. : vec(BOOST_PP_ENUM_PARAMS(M, arg)) {}
  40. #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
  41. FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
  42. #endif
  43. #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \
  44. (defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
  45. template <BOOST_PP_ENUM_PARAMS(M, typename U)>
  46. // XXX:
  47. #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
  48. FUSION_HASH if !defined(BOOST_CLANG)
  49. BOOST_CXX14_CONSTEXPR
  50. FUSION_HASH endif
  51. #else
  52. #if !defined(BOOST_CLANG)
  53. BOOST_CXX14_CONSTEXPR
  54. #endif
  55. #endif
  56. BOOST_FUSION_GPU_ENABLED
  57. #if M == 1
  58. explicit
  59. #endif
  60. vector(BOOST_PP_ENUM_BINARY_PARAMS(M, U, && arg)
  61. #if M == 1
  62. , typename boost::disable_if_c<boost::is_same<vector, typename boost::remove_cv_ref<U0>::type>::value, detail::enabler_>::type = detail::enabler
  63. #endif
  64. )
  65. : vec(BOOST_PP_ENUM(M, FUSION_FORWARD_CTOR_FORWARD, arg)) {}
  66. #endif
  67. #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
  68. FUSION_HASH endif
  69. #endif
  70. #undef M
  71. #endif // defined(BOOST_PP_IS_ITERATING)