|
Boost Users : |
Subject: [Boost-users] Preprocessor: Expaning empty VA_ARGS
From: Florian Lindner (mailinglists_at_[hidden])
Date: 2016-09-08 10:35:08
Hello,
I have this preprocessor macros:
-----------
#include <boost/preprocessor/variadic/to_seq.hpp>
#include <boost/preprocessor/seq/for_each_i.hpp>
#include <boost/preprocessor/stringize.hpp>
#include <iostream>
#define TRACE(...) \
std::cout << "foo" \
BOOST_PP_SEQ_FOR_EACH_I(LOG_ARGUMENT,, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__));
#define LOG_ARGUMENT(r, data, i, elem) \
<< std::endl << " Argument " << i << ": " << BOOST_PP_STRINGIZE(elem) << " == " << elem
int main(int argc, char *argv[])
{
TRACE();
return 0;
}
-----------
They compile when TRACE has arguments, but not without. Problem is, that LOG_ARGUMENT is called even when no args are
supplied, leading to the expansion:
std::cout << "foo" << std::endl << " Argument " <<
0
<< ": " << "" << " == " << ;;
elem is empty, therefore there is no expression after the last <<
expected primary-expression before »;« token
How can I deal with that?
Thanks,
Florian
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net