I'm already most of the way there:
#include <boost/preprocessor.hpp>
#define COUNT(...) BOOST_PP_VARIADIC_SIZE(__VA_ARGS__)
COUNT(1,2,3)
COUNT(1,2)
COUNT(1)
COUNT()
Running this with -E
flag in GCC outputs the following
3 2 1 1
When what I need is:
3 2 1 0
What am I doing wrong here? I'm not set on using boost preprocessor
, but I do need the solution to be variadic.
Any ideas how to get this to work?
With COUNT()
, you have one empty argument.
You may use something like:
#define PP_IS_EMPTY(...) (#__VA_ARGS__[0] == '\0' ? 1 : 0)
#define PP_COUNT(...) ((!PP_IS_EMPTY(__VA_ARGS__)) * (BOOST_PP_VARIADIC_SIZE(__VA_ARGS__)))
Alternatively, variadic template may be a solution.
template <typename ... Ts>
constexpr std::size_t Count(Ts&&...) { return sizeof...(Ts); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With