Я не уверен, что это лучшее решение (или, по крайней мере, просто хорошее), но вы можете использовать Boost.Preprocessor:
#include <boost/preprocessor/seq/for_each.hpp>
#include <boost/preprocessor/variadic/to_seq.hpp>
#define COUT_IMPL(_, __, i) \
std::cout << (i);
#define COUT(...) \
BOOST_PP_SEQ_FOR_EACH( \
COUT_IMPL, \
_, \
BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__) \
);
void use() {
COUT(e1, e2, e3);
}
Это заставляет C препроцессор создавать ;
- прекращено cout
s для вас, обеспечивая гарантированный порядок оценки.