summaryrefslogtreecommitdiff
path: root/boost/phoenix/core/detail/expression.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/phoenix/core/detail/expression.hpp')
-rw-r--r--boost/phoenix/core/detail/expression.hpp56
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))> \