argument.hpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /*==============================================================================
  2. Copyright (c) 2001-2010 Joel de Guzman
  3. Copyright (c) 2010 Eric Niebler
  4. Copyright (c) 2010-2011 Thomas Heller
  5. Distributed under the Boost Software License, Version 1.0. (See accompanying
  6. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  7. ==============================================================================*/
  8. #define BOOST_PHOENIX_ARGUMENT_N_TYPE(_, N, name) \
  9. typedef \
  10. expression::argument<BOOST_PP_INC(N)>::type \
  11. BOOST_PP_CAT(BOOST_PP_CAT(name, BOOST_PP_INC(N)), _type) \
  12. BOOST_ATTRIBUTE_UNUSED; \
  13. /**/
  14. #define BOOST_PHOENIX_ARGUMENT_N_INSTANCE(_, N, name) \
  15. expression::argument<BOOST_PP_INC(N)>::type const \
  16. BOOST_ATTRIBUTE_UNUSED \
  17. BOOST_PP_CAT(name, BOOST_PP_INC(N)) = {{{}}}; \
  18. /**/
  19. namespace placeholders
  20. {
  21. BOOST_PP_REPEAT(BOOST_PHOENIX_ARG_LIMIT, BOOST_PHOENIX_ARGUMENT_N_TYPE, arg)
  22. BOOST_PP_REPEAT(BOOST_PHOENIX_ARG_LIMIT, BOOST_PHOENIX_ARGUMENT_N_TYPE, _)
  23. #ifndef BOOST_PHOENIX_NO_PREDEFINED_TERMINALS
  24. BOOST_PP_REPEAT(BOOST_PHOENIX_ARG_LIMIT, BOOST_PHOENIX_ARGUMENT_N_INSTANCE, arg)
  25. BOOST_PP_REPEAT(BOOST_PHOENIX_ARG_LIMIT, BOOST_PHOENIX_ARGUMENT_N_INSTANCE, _)
  26. #endif
  27. }
  28. namespace arg_names
  29. {
  30. BOOST_PP_REPEAT(BOOST_PHOENIX_ARG_LIMIT, BOOST_PHOENIX_ARGUMENT_N_TYPE, arg)
  31. BOOST_PP_REPEAT(BOOST_PHOENIX_ARG_LIMIT, BOOST_PHOENIX_ARGUMENT_N_TYPE, _)
  32. #ifndef BOOST_PHOENIX_NO_PREDEFINED_TERMINALS
  33. BOOST_PP_REPEAT(BOOST_PHOENIX_ARG_LIMIT, BOOST_PHOENIX_ARGUMENT_N_INSTANCE, arg)
  34. BOOST_PP_REPEAT(BOOST_PHOENIX_ARG_LIMIT, BOOST_PHOENIX_ARGUMENT_N_INSTANCE, _)
  35. #endif
  36. }
  37. #undef BOOST_PHOENIX_ARGUMENT_N_TYPE
  38. #undef BOOST_PHOENIX_ARGUMENT_N_INSTANCE