diff --git a/include/boost/preprocessor/expr_if.hpp b/include/boost/preprocessor/expr_if.hpp index b748264..a86ae10 100644 --- a/include/boost/preprocessor/expr_if.hpp +++ b/include/boost/preprocessor/expr_if.hpp @@ -13,7 +13,9 @@ * See http://www.boost.org for most recent version. */ -#include +// pm: not necessary if using manual delay +// #include + #include /**

Expands to EXPR if COND != 0 and to nothing if COND == 0.

@@ -27,7 +29,10 @@
  • BOOST_PP_IF()
  • */ -#define BOOST_PP_EXPR_IF(COND,EXPR) BOOST_PP_DETAIL_CAT2(BOOST_PP_EXPR_IF,BOOST_PP_BOOL(COND))(EXPR) +#define BOOST_PP_EXPR_IF(COND,EXPR) BOOST_PP_EXPR_IF_BOOL(BOOST_PP_BOOL(COND),EXPR) // original: BOOST_PP_DETAIL_CAT2(BOOST_PP_EXPR_IF,BOOST_PP_BOOL(COND))(EXPR) + +#define BOOST_PP_EXPR_IF_BOOL(COND,EXPR) BOOST_PP_EXPR_IF_BOOL_DELAY(COND,EXPR) +#define BOOST_PP_EXPR_IF_BOOL_DELAY(COND,EXPR) BOOST_PP_EXPR_IF##COND(EXPR) #define BOOST_PP_EXPR_IF0(E) #define BOOST_PP_EXPR_IF1(E) E diff --git a/include/boost/preprocessor/if.hpp b/include/boost/preprocessor/if.hpp index 1a6266a..3e7f296 100644 --- a/include/boost/preprocessor/if.hpp +++ b/include/boost/preprocessor/if.hpp @@ -13,7 +13,9 @@ * See http://www.boost.org for most recent version. */ -#include +// pm: not necessary if using manual delay +// #include + #include /**

    Expands to THEN if COND != 0 and ELSE if @@ -33,7 +35,11 @@

  • preprocessor_test.cpp
  • */ -#define BOOST_PP_IF(COND,THEN,ELSE) BOOST_PP_DETAIL_CAT2(BOOST_PP_IF,BOOST_PP_BOOL(COND))(ELSE,THEN) -#define BOOST_PP_IF0(E,T) E -#define BOOST_PP_IF1(E,T) T +#define BOOST_PP_IF(COND,THEN,ELSE) BOOST_PP_IF_BOOL(BOOST_PP_BOOL(COND),THEN,ELSE) // original: BOOST_PP_DETAIL_CAT2(BOOST_PP_IF,BOOST_PP_BOOL(COND))(ELSE,THEN) + +#define BOOST_PP_IF_BOOL(COND,THEN,ELSE) BOOST_PP_IF_BOOL_DELAY(COND,THEN,ELSE) +#define BOOST_PP_IF_BOOL_DELAY(COND,THEN,ELSE) BOOST_PP_IF##COND(THEN,ELSE) + +#define BOOST_PP_IF0(T,E) E // BOOST_PP_IF0(E,T) E +#define BOOST_PP_IF1(T,E) T // BOOST_PP_IF1(E,T) T #endif diff --git a/include/boost/preprocessor/logical/bool.hpp b/include/boost/preprocessor/logical/bool.hpp index 5f41ee8..5234f1b 100644 --- a/include/boost/preprocessor/logical/bool.hpp +++ b/include/boost/preprocessor/logical/bool.hpp @@ -13,7 +13,8 @@ * See http://www.boost.org for most recent version. */ -#include +// pm: not necessary if using manual delay +// #include /**

    Expands to 0 if X == 0 and 1 if X != 0.

    @@ -21,7 +22,8 @@

    For example, BOOST_PP_BOOL(3) expands to 1.

    */ -#define BOOST_PP_BOOL(X) BOOST_PP_DETAIL_CAT2(BOOST_PP_BOOL,X) +#define BOOST_PP_BOOL(X) BOOST_PP_BOOL_DELAY(X) // original: BOOST_PP_DETAIL_CAT2(BOOST_PP_BOOL,X) +#define BOOST_PP_BOOL_DELAY(X) BOOST_PP_BOOL##X /* BOOL can be implemented in O(1) tokens using saturated ADD & SUB. * Unfortunately, it would result in significantly slower preprocessing.