Вот написал макрос. разбирая макросы BOOST_PP_SEQ_... по реализации думаю превосходит бустовский..
одно из преймуществ основных, макрос не ограничен количеством елементов..

как это зделано в бусте.
# define IROV_PP_DEFINE_RESULT(res) IROV_PP_DEFINE_RESULT_I(res)
# define IROV_PP_DEFINE_RESULT_I(x) x
# define IROV_PP_SEQ_TAIL(Q) IROV_PP_DEFINE_RESULT(IROV_PP_SEQ_TAIL_I Q)
# define IROV_PP_SEQ_TAIL_I(x)
# define IROV_PP_SEQ_ENUM(Q) IROV_PP_SEQ_HEAD(Q) ## IROV_PP_SEQ_ENUM_I(IROV_PP_SEQ_TAIL(Q))
# define IROV_PP_SEQ_ENUM_I(Q) IROV_PP_DEFINE_RESULT(IROV_PP_DEFINE_RESULT(IROV_PP_SEQ_FE_I1 Q) ## _END)
# define IROV_PP_SEQ_HEAD(Q) IROV_PP_DEFINE_RESULT(IROV_PP_DEFINE_RESULT(IROV_PP_SEQ_HEAD_I Q) ## _END)
# define IROV_PP_SEQ_HEAD_I(Q) Q IROV_PP_SEQ_EMPTY
# define IROV_PP_SEQ_EMPTY(Q) IROV_PP_SEQ_EMPTY_I
# define IROV_PP_SEQ_EMPTY_I(Q) IROV_PP_SEQ_EMPTY
# define IROV_PP_SEQ_EMPTY_END
# define IROV_PP_SEQ_EMPTY_I_END
# define IROV_PP_SEQ_FE_I1_END
# define IROV_PP_SEQ_FE_I2_END
# define IROV_PP_SEQ_FE_I1(x) , x IROV_PP_SEQ_FE_I2
# define IROV_PP_SEQ_FE_I2(x) , x IROV_PP_SEQ_FE_I1
# define SEQ_D (1)(2)(3)(4)
void main()
{
printf("SEQ = [%s]\n",BOOST_PP_STRINGIZE(SEQ_D ));
printf("ENUM = [%s]\n",BOOST_PP_STRINGIZE(IROV_PP_SEQ_ENUM(SEQ_D) ));
printf("TAIL = [%s]\n",BOOST_PP_STRINGIZE(IROV_PP_SEQ_TAIL(SEQ_D) ));
printf("HEAD = [%s]\n",BOOST_PP_STRINGIZE(IROV_PP_SEQ_HEAD(SEQ_D) ));
printf("\n\n\n");
}
Если я ничего не пропустил.. думаю стоит пересмотреть препроцесор в бусте, потомучто технология..
IROV_PP_DEFINE_RESULT(IROV_PP_DEFINE_RESULT(IROV_PP_SEQ_HEAD_I Q) ## _END)
дает большие возможности
Сейчас попробую написать IROV_PP_SEQ_FOR_EACH
# define IROV_PP_PARA_FIRST_PARAM(F) IROV_PP_PARA_FIRST_PARAM_I F
# define IROV_PP_PARA_FIRST_PARAM_I(x,y) x
# define IROV_PP_SEQ_HEAD(Q) IROV_PP_DEFINE_RESULT(IROV_PP_PARA_FIRST_PARAM( (IROV_PP_SEQ_HEAD_I Q) ) )
# define IROV_PP_SEQ_HEAD_I(Q) Q , (
Упграйд
Здравствуйте, Аноним, Вы писали:
А>То ли я такой, то ли компилятор, но:
А>-до апгрейда на gcc IROV_PP_SEQ_ENUM выводило только 1 элеметн множетсва
А>-после апгрейда выводило ошибку...
А>В студии все работает. Кстати, в gcc макросы такого типа вряд ли будут работать нормально, по-моему.
Тогда использовать как частный случай для MSVC
Здравствуйте, IROV.., Вы писали:
IRO>Здравствуйте, Аноним, Вы писали:
А>>То ли я такой, то ли компилятор, но:
А>>-до апгрейда на gcc IROV_PP_SEQ_ENUM выводило только 1 элеметн множетсва
А>>-после апгрейда выводило ошибку...
А>>В студии все работает. Кстати, в gcc макросы такого типа вряд ли будут работать нормально, по-моему.
IRO>Тогда использовать как частный случай для MSVC 
Здравствуйте, IROV.., Вы писали:
IRO>Здравствуйте, Аноним, Вы писали:
А>>То ли я такой, то ли компилятор, но:
А>>-до апгрейда на gcc IROV_PP_SEQ_ENUM выводило только 1 элеметн множетсва
А>>-после апгрейда выводило ошибку...
А>>В студии все работает. Кстати, в gcc макросы такого типа вряд ли будут работать нормально, по-моему.
IRO>Тогда использовать как частный случай для MSVC

Ага
А вообще, иногда баги Микрософт даже на руку... Как например, передача скобки "(" в качестве параметра :-D