diff options
Diffstat (limited to 'boost/phoenix/core/detail/expression.hpp')
-rw-r--r-- | boost/phoenix/core/detail/expression.hpp | 56 |
1 files changed, 53 insertions, 3 deletions
diff --git a/boost/phoenix/core/detail/expression.hpp b/boost/phoenix/core/detail/expression.hpp index 8ec6ce23d5..3134edae94 100644 --- a/boost/phoenix/core/detail/expression.hpp +++ b/boost/phoenix/core/detail/expression.hpp @@ -215,6 +215,20 @@ namespace boost { namespace phoenix } \ /**/ +#ifndef BOOST_PHOENIX_NO_VARIADIC_EXPRESSION + +#define BOOST_PHOENIX_DEFINE_EXPRESSION_EXPRESSION_VARARG(NAME_SEQ, _G, _L) \ + template <typename A0, typename... A> \ + struct BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_REVERSE(NAME_SEQ)) \ + : boost::phoenix::expr< \ + tag:: BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_REVERSE(NAME_SEQ)) \ + , A0, A... \ + > \ + {}; \ +/**/ + +#else // BOOST_PHOENIX_NO_VARIADIC_EXPRESSION + #define BOOST_PHOENIX_DEFINE_EXPRESSION_VARARG_R(_, N, NAME) \ template < \ BOOST_PHOENIX_typename_A( \ @@ -261,6 +275,7 @@ namespace boost { namespace phoenix ) \ ) \ /**/ +#endif // BOOST_PHOENIX_NO_VARIADIC_EXPRESSION #define BOOST_PHOENIX_DEFINE_EXPRESSION_RULE_VARARG(NAME_SEQ, GRAMMAR_SEQ, LIMIT) \ struct BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_REVERSE(NAME_SEQ)) \ @@ -282,12 +297,27 @@ namespace boost { namespace phoenix > \ {}; \ /**/ - + +#ifndef BOOST_PHOENIX_NO_VARIADIC_EXPRESSION + +#define BOOST_PHOENIX_DEFINE_EXPRESSION_RESULT_OF_MAKE_VARARG(NAME_SEQ, _G, _L) \ + template <typename A0, typename... A> \ + struct BOOST_PP_CAT(make_, BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_REVERSE(NAME_SEQ))) \ + : boost::result_of< \ + functional:: BOOST_PP_CAT(make_, BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_REVERSE(NAME_SEQ)))( \ + A0, A... \ + ) \ + > \ + {}; \ +/**/ + +#else // BOOST_PHOENIX_NO_VARIADIC_EXPRESSION + #define BOOST_PHOENIX_DEFINE_EXPRESSION_RESULT_OF_MAKE_VARARG_R(Z, N, NAME) \ template <BOOST_PHOENIX_typename_A(N)> \ - struct BOOST_PP_CAT(make_, NAME) <BOOST_PHOENIX_A(N)> \ + struct BOOST_PP_CAT(make_, NAME) <BOOST_PHOENIX_A(N)> \ : boost::result_of< \ - functional:: BOOST_PP_CAT(make_, NAME)( \ + functional:: BOOST_PP_CAT(make_, NAME)( \ BOOST_PHOENIX_A(N) \ ) \ > \ @@ -307,6 +337,24 @@ namespace boost { namespace phoenix , BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_REVERSE(NAME_SEQ)) \ ) \ /**/ +#endif // BOOST_PHOENIX_NO_VARIADIC_EXPRESSION + +#ifndef BOOST_PHOENIX_NO_VARIADIC_EXPRESSION + +#define BOOST_PHOENIX_DEFINE_EXPRESSION_MAKE_EXPRESSION_VARARG(NAME_SEQ, GRAMMAR_SEQ, LIMIT) \ + template <typename A0, typename... A> \ + inline \ + typename \ + result_of:: BOOST_PP_CAT(make_, BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_REVERSE(NAME_SEQ)))< \ + A0, A... \ + >::type \ + BOOST_PP_CAT(make_, BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_REVERSE(NAME_SEQ)))(A0 const& a0, A const&... a) \ + { \ + return functional::BOOST_PP_CAT(make_, BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_REVERSE(NAME_SEQ)))()(a0, a...); \ + } \ +/**/ + +#else // BOOST_PHOENIX_NO_VARIADIC_EXPRESSION #define BOOST_PHOENIX_DEFINE_EXPRESSION_MAKE_EXPRESSION_VARARG_R(Z, N, NAME) \ template <BOOST_PHOENIX_typename_A(N)> \ @@ -319,6 +367,7 @@ namespace boost { namespace phoenix { \ return functional::BOOST_PP_CAT(make_, NAME)()(BOOST_PHOENIX_a(N)); \ } \ +/**/ #define BOOST_PHOENIX_DEFINE_EXPRESSION_MAKE_EXPRESSION_VARARG(NAME_SEQ, GRAMMAR_SEQ, LIMIT) \ BOOST_PP_REPEAT_FROM_TO( \ @@ -328,6 +377,7 @@ namespace boost { namespace phoenix , BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_REVERSE(NAME_SEQ)) \ ) \ /**/ +#endif // BOOST_PHOENIX_NO_VARIADIC_EXPRESSION #define BOOST_PHOENIX_DEFINE_EXPRESSION_EXPRESSION_EXT(NAME_SEQ, GRAMMAR_SEQ, ACTOR) \ template <BOOST_PHOENIX_typename_A(BOOST_PP_SEQ_SIZE(GRAMMAR_SEQ))> \ |