Boost-pp: how to determine if a macro parameter is a tuple -
a tuple comma-separated list enclosed parens, e.g.
() (,) (thing,) (2,3)   if have
#define istuple(x) \\...   i'd istuple(nope) resolve 0 , istuple((yep)) resolve 1. 
[fwiw, have _rtfm_'d plenty.]
it done in preprocessing library little work, variadic macro data library (added boost since question posted) has ready-made solution. boost_vmd_is_tuple, defined in boost/vmd/is_tuple.hpp, should you're looking for:
#include <iostream>  #include <boost/vmd/is_tuple.hpp>  #if boost_vmd_is_tuple() != 0   #error boost_vmd_is_tuple() != 0 #endif  #if boost_vmd_is_tuple(nope) != 0   #error boost_vmd_is_tuple(nope) != 0 #endif  #if boost_vmd_is_tuple((yep)) != 1   #error boost_vmd_is_tuple((yep)) != 1 #endif  #if boost_vmd_is_tuple(()) != 1   #error boost_vmd_is_tuple(()) != 1 #endif  #if boost_vmd_is_tuple((,)) != 1   #error boost_vmd_is_tuple((,)) != 1 #endif  #if boost_vmd_is_tuple((thing,)) != 1   #error boost_vmd_is_tuple((thing,)) != 1 #endif  #if boost_vmd_is_tuple((2,3)) != 1   #error boost_vmd_is_tuple((2,3)) != 1 #endif  static_assert(boost_vmd_is_tuple() == 0,"boost_vmd_is_tuple() != 0"); static_assert(boost_vmd_is_tuple(nope) == 0,"boost_vmd_is_tuple(nope) != 0"); static_assert(boost_vmd_is_tuple((yep)) == 1,"boost_vmd_is_tuple((yep)) != 1"); static_assert(boost_vmd_is_tuple(()) == 1,"boost_vmd_is_tuple(()) != 1"); static_assert(boost_vmd_is_tuple((,)) == 1,"boost_vmd_is_tuple((,)) != 1"); static_assert(boost_vmd_is_tuple((thing,)) == 1,"boost_vmd_is_tuple((thing,)) != 1"); static_assert(boost_vmd_is_tuple((2,3)) == 1,"boost_vmd_is_tuple((2,3)) != 1");  int main(void) {     using std::cout;     using std::endl;     cout << "boost_vmd_is_tuple() == " << boost_vmd_is_tuple() << endl;     cout << "boost_vmd_is_tuple(nope) == " << boost_vmd_is_tuple(nope) << endl;     cout << "boost_vmd_is_tuple((yep)) == " << boost_vmd_is_tuple((yep)) << endl;     cout << "boost_vmd_is_tuple(()) == " << boost_vmd_is_tuple(()) << endl;     cout << "boost_vmd_is_tuple((,)) == " << boost_vmd_is_tuple((,)) << endl;     cout << "boost_vmd_is_tuple((thing,)) == " << boost_vmd_is_tuple((thing,)) << endl;     cout << "boost_vmd_is_tuple((2,3)) == " << boost_vmd_is_tuple((2,3)) << endl;      return 0; }   output:
boost_vmd_is_tuple() == 0 boost_vmd_is_tuple(nope) == 0 boost_vmd_is_tuple((yep)) == 1 boost_vmd_is_tuple(()) == 1 boost_vmd_is_tuple((,)) == 1 boost_vmd_is_tuple((thing,)) == 1 boost_vmd_is_tuple((2,3)) == 1        
Comments
Post a Comment