У меня есть следующий макрос препроцессора повышения для создания функции
extern "C" EXPORT out name(BOOST_PP_SEQ_FOR_EACH_I(PARAMETER_LIST, 0, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)))
Это прекрасно работает, если только __VA_ARGS__
не пуст. После некоторых поисков я нашел способ подсчитать количество аргументов в __VA_ARGS__
, используя BOOST_PP_VARIADIC_SIZE. Немного подумав, я написал этот МАКРОС:
extern "C" EXPORT out name(BOOST_PP_IF(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), BOOST_PP_SEQ_FOR_EACH_I(PARAMETER_LIST, 0, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)), void))
Я думаю, что это должно сработать, однако я продолжаю получать следующее предупреждение
warning C4002: too many actual parameters for macro 'BOOST_PP_IIF_1'
Хотя это предупреждение, похоже, что препроцессор ломается. При передаче нескольких аргументов будет обрабатываться только первый. Я нахожу это таким странным, как добавить это, если сломать все таким странным образом? Я проверил запятые и скобки сто раз, но они кажутся прекрасными. Как я могу исправить этот препроцессор?
http://www.boost.org/doc/libs/1_54_0/libs/preprocessor/doc/ref/if.html
Изменить: эта регрессия кажется актуальной: https://svn.boost.org/trac/boost/ticket/8606