BOOST_PP_CAT / BOOST_PP_SEQ_CAT / BOOST_PP_SEQ_SIZE / BOOST_PP_SEQ_HEAD / BOOST_PP_LESS_EQUAL

BOOST的预处理十分复杂。真是非常难以理清楚。下面的内容只能算作笔记,避免忘记了。
 
也只有自己能看明白了。
// push_back_.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#define  seq (a) (b) (c)
int _tmain(int argc, _TCHAR* argv[])
{  
   
    return 0;
}
// VC6 1200
// VC7 1300
// VC8 1400
// VC9 1500
#    define BOOST_PP_CAT(a, b) BOOST_PP_CAT_OO((a, b))
#    define BOOST_PP_CAT_OO(par) BOOST_PP_CAT_I ## par
#    define BOOST_PP_CAT_I(a, b) a ## b
# define BOOST_PP_SEQ_CAT(seq) /
    BOOST_PP_IF( /
    BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq)), /
    BOOST_PP_SEQ_CAT_I, /
    BOOST_PP_SEQ_HEAD(seq) BOOST_PP_TUPLE_EAT_1 /
    )(seq) /
    /**/
//seq是一个带括弧的序列,如上面定义的#define seq (a) (b) (c)
# define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_SEQ_SIZE_I(seq)
#    define BOOST_PP_SEQ_SIZE_I(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 seq)
//上面 BOOST_PP_CAT()括弧里面( BOOST_PPSEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 seq),先对BOOST_PP_SEQ_SIZE_0进行扩展
//也就是BOOST_PP_SIZE_0 (a) (b) (c)  这是宏调用不是宏定义,对空格不敏感。
//先执行BOOST_PP_SIZE_0 (a) 为 BOOST_PP_SEQ_SIZE_1
//再扩展BOOST_PP_SEQ_SIZE_1 (b) 为 BOOST_PP_SEQ_SIZE_2
//在扩展BOOST_PP_SEQ_SIZE_2 (c) 为 BOOST_PP_SEQ_SIZE_3
//上面再用BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PPSEQ_SIZE_3)连接起来,成为:
//BOOST_PP_SEQ_SIZE_BOOST_PPSEQ_SIZE_3,
//而它的值为 3,就是这个序列的有三个元素的意思。
# define BOOST_PP_SEQ_SIZE_0(_) BOOST_PP_SEQ_SIZE_1
# define BOOST_PP_SEQ_SIZE_1(_) BOOST_PP_SEQ_SIZE_2
# define BOOST_PP_SEQ_SIZE_2(_) BOOST_PP_SEQ_SIZE_3
# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_3 3
#    define BOOST_PP_DEC(x) BOOST_PP_DEC_OO((x))
#    define BOOST_PP_DEC_OO(par) BOOST_PP_DEC_I ## par
# define BOOST_PP_DEC_I(x) BOOST_PP_DEC_ ## x
# define BOOST_PP_DEC_0 0
# define BOOST_PP_DEC_3 2 //上面的BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq)) 最终结果是 2
# define BOOST_PP_SEQ_HEAD(seq) BOOST_PP_SEQ_ELEM(0, seq) //最终得到的是首元素。
//宏调用的时候不会理会是否有空格。
//宏定义就不会忽略是否有空格。
#    define BOOST_PP_SEQ_ELEM(i, seq) BOOST_PP_SEQ_ELEM_I((i, seq))//这儿的i而序列的下标,可以得到序列的任何一个元素。
#    define BOOST_PP_SEQ_ELEM_I(i, seq) BOOST_PP_SEQ_ELEM_II((BOOST_PP_SEQ_ELEM_ ## i seq))
#    define BOOST_PP_SEQ_ELEM_II(res) BOOST_PP_SEQ_ELEM_IV(BOOST_PP_SEQ_ELEM_III res)
#    define BOOST_PP_SEQ_ELEM_III(x, _) x BOOST_PP_EMPTY()//最终得到的是x
#    define BOOST_PP_SEQ_ELEM_IV(x) x
# define BOOST_PP_EMPTY()
# define BOOST_PP_SEQ_ELEM_0(x) x, BOOST_PP_NIL//BOOST_PP_NIL只是一个符号,像占位符一样的功能。
# define BOOST_PP_SEQ_CAT_I(seq) BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_CAT_O, BOOST_PP_SEQ_HEAD(seq), BOOST_PP_SEQ_TAIL(seq))
//上面展开的部分结构是:
BOOST_PP_IF( 2, BOOST_PP_SEQ_CAT_I, a BOOST_PP_TUPLE_EAT_1 )(seq)
#    define BOOST_PP_IF(cond, t, f) BOOST_PP_IF_I(cond, t, f)
#    define BOOST_PP_IF_I(cond, t, f) BOOST_PP_IIF(BOOST_PP_BOOL(cond), t, f)
#    define BOOST_PP_BOOL(x) BOOST_PP_BOOL_OO((x))
#    define BOOST_PP_BOOL_OO(par) BOOST_PP_BOOL_I ## par
# define BOOST_PP_BOOL_I(x) BOOST_PP_BOOL_ ## x
# define BOOST_PP_BOOL_2 1 //BOOST_PP_BOOL(2)的值为1
#    define BOOST_PP_IIF(bit, t, f) BOOST_PP_IIF_OO((bit, t, f))
#    define BOOST_PP_IIF_OO(par) BOOST_PP_IIF_I ## par
#    define BOOST_PP_IIF_I(bit, t, f) BOOST_PP_IIF_ ## bit(t, f)
# define BOOST_PP_IIF_0(t, f) f //false 选f
# define BOOST_PP_IIF_1(t, f) t //true  选 t
//因此BOOST_PP_IF( 2, BOOST_PP_SEQ_CAT_I, a BOOST_PP_TUPLE_EAT_1 )(seq) 推导的结果是:
BOOST_PP_SEQ_CAT_I(seq)
# define BOOST_PP_SEQ_CAT_I(seq) BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_CAT_O, BOOST_PP_SEQ_HEAD(seq), BOOST_PP_SEQ_TAIL(seq))
//BOOST_PP_SEQ_TAIL(seq)是除第一个元素外余下的元素。
#    define BOOST_PP_SEQ_TAIL(seq) BOOST_PP_SEQ_TAIL_ID(BOOST_PP_SEQ_TAIL_I seq)
#    define BOOST_PP_SEQ_TAIL_ID(id) id
# define BOOST_PP_SEQ_TAIL_I(x)
# define BOOST_PP_SEQ_FOLD_LEFT BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_LEFT_, BOOST_PP_AUTO_REC(BOOST_PP_SEQ_FOLD_LEFT_P, 256))
# define BOOST_PP_AUTO_REC(pred, n) BOOST_PP_NODE_ENTRY_ ## n(pred)
# define BOOST_PP_NODE_ENTRY_256(p) BOOST_PP_NODE_128(p)(p)(p)(p)(p)(p)(p)(p)
# define BOOST_PP_NODE_128(p) BOOST_PP_IIF(p(128), BOOST_PP_NODE_64, BOOST_PP_NODE_192)
# define BOOST_PP_SEQ_FOLD_LEFT_P(n) BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_LEFT_CHECK_, BOOST_PP_SEQ_FOLD_LEFT_I_ ## n(BOOST_PP_SEQ_FOLD_LEFT_O, BOOST_PP_NIL, (nil), 1))
# define BOOST_PP_SEQ_FOLD_LEFT_256(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, sz) 0
//BOOST_PP_LESS_EQUAL(2,3)
#    define BOOST_PP_LESS_EQUAL(x, y) BOOST_PP_LESS_EQUAL_I(x, y)
#    define BOOST_PP_LESS_EQUAL_I(x, y) BOOST_PP_NOT(BOOST_PP_SUB(x, y))
#    define BOOST_PP_SUB(x, y) BOOST_PP_SUB_I(x, y)
#    define BOOST_PP_SUB_I(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y)))
//2_
BOOST_PP_TUPLE_ELEM(2,0,BOOST_PP_WHILE(BOOST_PP_SUB_P,BOOST_PP_SUB_O,(2,3)))
//%%%%%
BOOST_PP_TUPLE_ELEM(2,0,(0,0))
为: 0
//1_
# define BOOST_PP_WHILE BOOST_PP_CAT(BOOST_PP_WHILE_, BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256))
# define BOOST_PP_AUTO_REC(pred, n) BOOST_PP_NODE_ENTRY_ ## n(pred)
BOOST_PP_NODE_ENTRY_256(BOOST_PP_WHILE_P)
# define BOOST_PP_NODE_ENTRY_256(p) BOOST_PP_NODE_128(p)(p)(p)(p)(p)(p)(p)(p)
BOOST_PP_NODE_128(BOOST_PP_WHILE_P)(BOOST_PP_WHILE_P)(BOOST_PP_WHILE_P)(BOOST_PP_WHILE_P)(BOOST_PP_WHILE_P)(BOOST_PP_WHILE_P)(BOOST_PP_WHILE_P)(BOOST_PP_WHILE_P)
# define BOOST_PP_NODE_128(p) BOOST_PP_IIF(p(128), BOOST_PP_NODE_64, BOOST_PP_NODE_192)
//XX
BOOST_PP_IIF(BOOST_PP_WHILE_P(128), BOOST_PP_NODE_64, BOOST_PP_NODE_192)(BOOST_PP_WHILE_P)(BOOST_PP_WHILE_P)(BOOST_PP_WHILE_P)(BOOST_PP_WHILE_P)(BOOST_PP_WHILE_P)(BOOST_PP_WHILE_P)(BOOST_PP_WHILE_P)
//BOOST_PP_WHILE_P(128)
#    define BOOST_PP_WHILE_P(n) BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_WHILE_CHECK_, BOOST_PP_WHILE_ ## n(BOOST_PP_WHILE_F, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_CHECK_, BOOST_PP_LIST_FOLD_LEFT_ ## n(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL)))
BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_WHILE_CHECK_, BOOST_PP_WHILE_128(BOOST_PP_WHILE_F, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_CHECK_, BOOST_PP_LIST_FOLD_LEFT_128(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL)))//这儿推断有错误。
//BOOST_PP_WHILE_128
# define BOOST_PP_WHILE_128(p, o, s) BOOST_PP_WHILE_128_C(BOOST_PP_BOOL(p##(129, s)), p, o, s)
BOOST_PP_WHILE_128_C(BOOST_PP_BOOL(BOOST_PP_WHILE_F(129,BOOST_PP_NIL),BOOST_PP_WHILE_F,BOOST_PP_NIL,BOOST_PP_NIL))
# define BOOST_PP_WHILE_F(d, _) 0
BOOST_PP_WHILE_128_C(0,BOOST_PP_WHILE_F,BOOST_PP_NIL,BOOST_PP_NIL))
# define BOOST_PP_WHILE_128_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_129, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(129, s))
BOOST_PP_IIF(0, BOOST_PP_WHILE_129, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(129, s))
BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3(BOOST_PP_WHILE_F,BOOST_PP_NIL,BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2(129,BOOST_PP_NIL))
# define BOOST_PP_TUPLE_EAT_2(a, b)
BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3(BOOST_PP_WHILE_F,BOOST_PP_NIL,BOOST_PP_NIL)
# define BOOST_PP_TUPLE_EAT_3(a, b, c)
BOOST_PP_NIL//这一节的最后结果
//at BOOST_PP_WHILE_128
BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_WHILE_CHECK_, BOOST_PP_NIL), BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_CHECK_, BOOST_PP_LIST_FOLD_LEFT_128(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL)))//
# define BOOST_PP_LIST_FOLD_LEFT_128(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_129, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(129, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(BOOST_PP_NIL), BOOST_PP_LIST_FOLD_LEFT_129, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(BOOST_PP_NIL, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(BOOST_PP_NIL), BOOST_PP_NIL)(129, BOOST_PP_NIL, BOOST_PP_LIST_FIRST(BOOST_PP_NIL)), BOOST_PP_LIST_REST(BOOST_PP_NIL))
#    define BOOST_PP_LIST_IS_CONS(list) BOOST_PP_IS_BINARY(list)
#    define BOOST_PP_IS_BINARY(x) BOOST_PP_IS_BINARY_I(x)
#    define BOOST_PP_IS_BINARY_I(x) BOOST_PP_CHECK(x, BOOST_PP_IS_BINARY_CHECK)
BOOST_PP_CHECK(BOOST_PP_NIL, BOOST_PP_IS_BINARY_CHECK)
#    define BOOST_PP_CHECK(x, type) BOOST_PP_CHECK_OO((x, type))
#    define BOOST_PP_CHECK_OO(par) BOOST_PP_CHECK_D ## par
BOOST_PP_CHECK_D(BOOST_PP_NIL, BOOST_PP_IS_BINARY_CHECK)
#    define BOOST_PP_CHECK_D(x, type) BOOST_PP_CHECK_1(type x)
#    define BOOST_PP_CHECK_1(chk) BOOST_PP_CHECK_2(chk)
#    define BOOST_PP_CHECK_2(chk) BOOST_PP_CHECK_3((BOOST_PP_CHECK_RESULT_ ## chk))
BOOST_PP_CHECK_3((BOOST_PP_CHECK_RESULT_BOOST_PP_IS_BINARY_CHECK BOOST_PP_NIL))
# define BOOST_PP_CHECK_RESULT_BOOST_PP_IS_BINARY_CHECK 0, BOOST_PP_NIL
BOOST_PP_CHECK_3(( 0, BOOST_PP_NIL BOOST_PP_NIL))
#    define BOOST_PP_CHECK_3(im) BOOST_PP_CHECK_5(BOOST_PP_CHECK_4 im)
BOOST_PP_CHECK_5(BOOST_PP_CHECK_4( 0, BOOST_PP_NIL BOOST_PP_NIL) )
#    define BOOST_PP_CHECK_4(res, _) res
#    define BOOST_PP_CHECK_5(res) res
//最后为 0
BOOST_PP_IIF(0, BOOST_PP_LIST_FOLD_LEFT_129, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(BOOST_PP_NIL, BOOST_PP_EXPR_IIF(0, BOOST_PP_NIL)(129, BOOST_PP_NIL, BOOST_PP_LIST_FIRST(BOOST_PP_NIL)), BOOST_PP_LIST_REST(BOOST_PP_NIL))
#    define BOOST_PP_EXPR_IF(cond, expr) BOOST_PP_EXPR_IF_I(cond, expr)
#    define BOOST_PP_EXPR_IF_I(cond, expr) BOOST_PP_EXPR_IIF(0, BOOST_PP_NIL)
BOOST_PP_EXPR_IIF(0, BOOST_PP_NIL)
#    define BOOST_PP_EXPR_IIF(bit, expr) BOOST_PP_EXPR_IIF_OO((bit, expr))
#    define BOOST_PP_EXPR_IIF_OO(par) BOOST_PP_EXPR_IIF_I ## par
BOOST_PP_EXPR_IIF_I(0, BOOST_PP_NIL)
# define BOOST_PP_EXPR_IIF_I(bit, expr) BOOST_PP_EXPR_IIF_ ## bit(expr)
BOOST_PP_EXPR_IIF_0(BOOST_PP_NIL)
# define BOOST_PP_EXPR_IIF_0(expr)
# define BOOST_PP_EXPR_IIF_1(expr) expr
BOOST_PP_IIF(0, BOOST_PP_LIST_FOLD_LEFT_129, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(BOOST_PP_NIL, (129, BOOST_PP_NIL, BOOST_PP_LIST_FIRST(BOOST_PP_NIL)), BOOST_PP_LIST_REST(BOOST_PP_NIL))
BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3(BOOST_PP_NIL, (129, BOOST_PP_NIL, BOOST_PP_LIST_FIRST(BOOST_PP_NIL)), BOOST_PP_LIST_REST(BOOST_PP_NIL)))
# define BOOST_PP_TUPLE_EAT_3(a, b, c)
//推出为:
BOOST_PP_NIL
BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_WHILE_CHECK_, BOOST_PP_NIL), BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_CHECK_, BOOST_PP_NIL))//
BOOST_PP_BITAND(BOOST_PP_WHILE_CHECK_BOOST_PP_NIL, BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_NIL)
# define BOOST_PP_WHILE_CHECK_BOOST_PP_NIL 1
# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_NIL 1
#    define BOOST_PP_BITAND_I(x, y) BOOST_PP_BITAND_ ## x ## y
BOOST_PP_BITAND_I(1,1)   BOOST_PP_BITAND_11
# define BOOST_PP_BITAND_11 1
//这儿的结果为:
1
// at XX
BOOST_PP_NODE_64(BOOST_PP_WHILE_P)(BOOST_PP_WHILE_P)(BOOST_PP_WHILE_P)(BOOST_PP_WHILE_P)(BOOST_PP_WHILE_P)(BOOST_PP_WHILE_P)(BOOST_PP_WHILE_P)
#   define BOOST_PP_NODE_1(p) BOOST_PP_IIF(p(1), 1, 2)
//因此 at 2_
BOOST_PP_TUPLE_ELEM(2,0,BOOST_PP_WHILE_1(BOOST_PP_SUB_P,BOOST_PP_SUB_O,(2,3)))
# define BOOST_PP_WHILE_1(p, o, s) BOOST_PP_WHILE_1_C(BOOST_PP_BOOL(p(2, s)), p, o, s)
BOOST_PP_WHILE_1_C(BOOST_PP_BOOL(BOOST_PP_SUB_P(2,(2,3)),BOOST_PP_SUB_P,BOOST_PP_SUB_O),(2,3))
# define BOOST_PP_SUB_P(d, xy) BOOST_PP_TUPLE_ELEM(2, 1, xy)
BOOST_PP_TUPLE_ELEM(2,1,(2,3))
# define BOOST_PP_SUB_P(d, xy) BOOST_PP_TUPLE_ELEM(2, 1, xy)
BOOST_PP_TUPLE_ELEM(2,1,(2,3))
#    define BOOST_PP_TUPLE_ELEM(size, index, tuple) BOOST_PP_TUPLE_ELEM_OO((size, index, tuple))
#    define BOOST_PP_TUPLE_ELEM_OO(par) BOOST_PP_TUPLE_ELEM_I ## par
BOOST_PP_TUPLE_ELEM_OO((2,1,(2,3)))
BOOST_PP_TUPLE_ELEM_I(2,1,(2,3))
#    define BOOST_PP_TUPLE_ELEM_I(s, i, t) BOOST_PP_TUPLE_ELEM_II(BOOST_PP_TUPLE_ELEM_ ## s ## _ ## i t)
#    define BOOST_PP_TUPLE_ELEM_II(res) res
BOOST_PP_TUPLE_ELEM_II(BOOST_PP_TUPLE_ELEM_2_1(2,3))
BOOST_PP_TUPLE_ELEM_2_1(2,3)
# define BOOST_PP_TUPLE_ELEM_2_1(a, b) b
3
#    define BOOST_PP_BOOL(x) BOOST_PP_BOOL_OO((x))
#    define BOOST_PP_BOOL_OO(par) BOOST_PP_BOOL_I ## par
# define BOOST_PP_BOOL_3 1
BOOST_PP_WHILE_1_C(1,BOOST_PP_SUB_P,BOOST_PP_SUB_O,(2,3))
# define BOOST_PP_WHILE_1_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_2, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(2, s))
BOOST_PP_IIF(1, BOOST_PP_WHILE_2, (2,3) BOOST_PP_TUPLE_EAT_3)(BOOST_PP_SUB_P, BOOST_PP_SUB_O, BOOST_PP_IIF(1, BOOST_PP_SUB_O, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(2, (2,3)))
BOOST_PP_WHILE_2(BOOST_PP_SUB_P, BOOST_PP_SUB_O,BOOST_PP_SUB_O(2, (2,3)))
#    define BOOST_PP_SUB_O(d, xy) BOOST_PP_SUB_O_I(BOOST_PP_TUPLE_ELEM(2, 0, xy), BOOST_PP_TUPLE_ELEM(2, 1, xy))
BOOST_PP_SUB_O_I(BOOST_PP_TUPLE_ELEM(2,0,(2,3)),BOOST_PP_TUPLE_ELEM(2, 1, (2,3)))
BOOST_PP_SUB_O_I(2,3)
# define BOOST_PP_SUB_O_I(x, y) (BOOST_PP_DEC(x), BOOST_PP_DEC(y))
(1,2)
BOOST_PP_WHILE_2(BOOST_PP_SUB_P, BOOST_PP_SUB_O,(1,2))
# define BOOST_PP_WHILE_2(p, o, s) BOOST_PP_WHILE_2_C(BOOST_PP_BOOL(p(3, s)), p, o, s)
BOOST_PP_WHILE_2_C(BOOST_PP_BOOL(BOOST_PP_SUB_P(3, (1,2))), BOOST_PP_SUB_P, BOOST_PP_SUB_O, (1,2))
# define BOOST_PP_SUB_P(d, xy) BOOST_PP_TUPLE_ELEM(2, 1, xy)
BOOST_PP_TUPLE_ELEM(2,1,(1,2))
#    define BOOST_PP_TUPLE_ELEM(size, index, tuple) BOOST_PP_TUPLE_ELEM_OO((size, index, tuple))
#    define BOOST_PP_TUPLE_ELEM_OO(par) BOOST_PP_TUPLE_ELEM_I ## par
BOOST_PP_TUPLE_ELEM_OO((2,1,(1,2)))
BOOST_PP_TUPLE_ELEM_I(2,1,(1,2))
#    define BOOST_PP_TUPLE_ELEM_I(s, i, t) BOOST_PP_TUPLE_ELEM_II(BOOST_PP_TUPLE_ELEM_ ## s ## _ ## i t)
#    define BOOST_PP_TUPLE_ELEM_II(res) res
BOOST_PP_TUPLE_ELEM_II(BOOST_PP_TUPLE_ELEM_2_1(1,2))
BOOST_PP_TUPLE_ELEM_2_1(1,2)
# define BOOST_PP_TUPLE_ELEM_2_1(a, b) b
2
BOOST_PP_WHILE_2_C(1, BOOST_PP_SUB_P, BOOST_PP_SUB_O, (1,2))
# define BOOST_PP_WHILE_2_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_3, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(3, s))
BOOST_PP_IIF(1, BOOST_PP_WHILE_3, (1,2) BOOST_PP_TUPLE_EAT_3)(BOOST_PP_SUB_P, BOOST_PP_SUB_O, BOOST_PP_IIF(1, BOOST_PP_SUB_O, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(3, (1,2)))
BOOST_PP_WHILE_3(BOOST_PP_SUB_P, BOOST_PP_SUB_O,BOOST_PP_SUB_O(3, (1,2)))
#    define BOOST_PP_SUB_O(d, xy) BOOST_PP_SUB_O_I(BOOST_PP_TUPLE_ELEM(2, 0, xy), BOOST_PP_TUPLE_ELEM(2, 1, xy))
BOOST_PP_SUB_O_I(BOOST_PP_TUPLE_ELEM(2,0,(1,2)), BOOST_PP_TUPLE_ELEM(2,1,(1,2)))
BOOST_PP_SUB_O_I(1,2)
# define BOOST_PP_SUB_O_I(x, y) (BOOST_PP_DEC(x), BOOST_PP_DEC(y))
(0,1)
BOOST_PP_WHILE_3(BOOST_PP_SUB_P, BOOST_PP_SUB_O,(0,1))
# define BOOST_PP_WHILE_3(p, o, s) BOOST_PP_WHILE_3_C(BOOST_PP_BOOL(p(4, s)), p, o, s)
BOOST_PP_WHILE_3_C(BOOST_PP_BOOL(BOOST_PP_SUB_P(4, (0,1))), BOOST_PP_SUB_P, BOOST_PP_SUB_O, (0,1))
# define BOOST_PP_SUB_P(d, xy) BOOST_PP_TUPLE_ELEM(2, 1, xy)
BOOST_PP_TUPLE_ELEM(2,1,(0,1))
BOOST_PP_TUPLE_ELEM(2,1,(0,1))
#    define BOOST_PP_TUPLE_ELEM(size, index, tuple) BOOST_PP_TUPLE_ELEM_OO((size, index, tuple))
#    define BOOST_PP_TUPLE_ELEM_OO(par) BOOST_PP_TUPLE_ELEM_I ## par
BOOST_PP_TUPLE_ELEM_OO((2,1,(0,1)))
BOOST_PP_TUPLE_ELEM_I(2,1,(0,1))
#    define BOOST_PP_TUPLE_ELEM_I(s, i, t) BOOST_PP_TUPLE_ELEM_II(BOOST_PP_TUPLE_ELEM_ ## s ## _ ## i t)
#    define BOOST_PP_TUPLE_ELEM_II(res) res
BOOST_PP_TUPLE_ELEM_II(BOOST_PP_TUPLE_ELEM_2_1(0,1))
BOOST_PP_TUPLE_ELEM_2_1(0,1)
# define BOOST_PP_TUPLE_ELEM_2_1(a, b) b
1
BOOST_PP_WHILE_3_C(BOOST_PP_BOOL(1), BOOST_PP_SUB_P, BOOST_PP_SUB_O, (0,1))
BOOST_PP_WHILE_3_C(1, BOOST_PP_SUB_P, BOOST_PP_SUB_O, (0,1))
# define BOOST_PP_WHILE_3_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_4, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(4, s))
BOOST_PP_IIF(1, BOOST_PP_WHILE_4, (0,1) BOOST_PP_TUPLE_EAT_3)(BOOST_PP_SUB_P, BOOST_PP_SUB_O, BOOST_PP_IIF(1, BOOST_PP_SUB_O, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(4, (0,1)))
BOOST_PP_WHILE_4(BOOST_PP_SUB_P, BOOST_PP_SUB_O, BOOST_PP_SUB_O(4, (0,1)))
#    define BOOST_PP_SUB_O(d, xy) BOOST_PP_SUB_O_I(BOOST_PP_TUPLE_ELEM(2, 0, (0,1)), BOOST_PP_TUPLE_ELEM(2, 1, (0,1)))
BOOST_PP_SUB_O_I(1, 1)
(0,0)
BOOST_PP_WHILE_4(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (0,0))
# define BOOST_PP_WHILE_4(p, o, s) BOOST_PP_WHILE_4_C(BOOST_PP_BOOL(p(5, s)), p, o, s)
BOOST_PP_WHILE_4_C(0, BOOST_PP_SUB_P, BOOST_PP_SUB_O, (0,0))
# define BOOST_PP_WHILE_4(p, o, s) BOOST_PP_WHILE_4_C(BOOST_PP_BOOL(p(5, s)), p, o, s)
BOOST_PP_WHILE_4_C(BOOST_PP_BOOL(BOOST_PP_SUB_P(5, (0,0))), BOOST_PP_SUB_P, BOOST_PP_SUB_O, (0,0))
BOOST_PP_WHILE_4_C(0, BOOST_PP_SUB_P, BOOST_PP_SUB_O, (0,0))
# define BOOST_PP_WHILE_4_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_5, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(5, s))
BOOST_PP_IIF(0, BOOST_PP_WHILE_5, (0,0) BOOST_PP_TUPLE_EAT_3)(BOOST_PP_SUB_P, BOOST_PP_SUB_O, BOOST_PP_IIF(0, BOOST_PP_SUB_O, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(5, (0,0)))
//最后结果是:
(0,0)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yshuise

权术横行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值