Boost logo

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