
Hello, I am trying to generate many types from 1 struct (for full background, please see thread "generate structs with all combinations of members from a given struct"), with the help of Boost.PP #include <boost/preprocessor/control/if.hpp> #include <boost/preprocessor/seq/size.hpp> #include <boost/preprocessor/seq/seq.hpp> #include <boost/preprocessor/seq/elem.hpp> #include <boost/preprocessor/arithmetic/sub.hpp> #include <boost/preprocessor/seq/pop_front.hpp> #include <boost/preprocessor/seq/push_back.hpp> #define STRUCTMEMBERS ((double,m1))((double,m2))((double,m3))((double,m4))((double,m5)) #define SEQ_LAST_ELEM(seq) \ BOOST_PP_SEQ_ELEM( BOOST_PP_SUB(BOOST_PP_SEQ_SIZE(seq), 1), seq) #define UPDATE_MAIN_SEQ(mainseq, globalseq)\ BOOST_PP_IF( BOOST_PP_SEQ_SIZE(mainseq),\ BOOST_PP_SEQ_PUSH_BACK(\ mainseq,\ ((SEQ_LAST_ELEM(mainseq))(BOOST_PP_SEQ_HEAD(globalseq)))\ ),\ ((BOOST_PP_SEQ_HEAD(globalseq)))\ ) #define COMBINATIONS(seq, combseq)\ BOOST_PP_IF( BOOST_PP_SEQ_SIZE(seq),\ COMBINATIONS( UPDATE_MAIN_SEQ(combseq,seq), BOOST_PP_SEQ_POP_FRONT(seq) ), \ combseq\ ) #define COMBOS COMBINATIONS(STRUCTMEMBERS, BOOST_PP_SEQ_NIL) COMBOS Reading PP docs, I just realized that the preprocessor disallows recursion ( the COMBINATIONS macro calls itself in my case), but I didn't understand the reentrancy topic page. How can I change the above code to make the recursive COMBINATIONS possible? regards,