BOOST_PP_IS_UNARY

  • これで引数がSequenceかどうかを調べられる・・・参照
  • ただし、調べられる引数は限られる(Tupleを渡したりはできない)
  • Boost.TypeOfで使われている

[]#include[] []<boost/preprocessor/detail/is_nullary.hpp>[]
[]#include[] []<boost/preprocessor/detail/is_unary.hpp>[]
[]#include[] []<boost/preprocessor/detail/is_binary.hpp>[]

[]void[] []test[][]()[]
[]{[]
[]BOOST_CHECK[][]( [][]BOOST_PP_IS_NULLARY[][]( () ) );[]
[]BOOST_CHECK[][]( [][]BOOST_PP_IS_NULLARY[][]( ()([][]x[][],[][]y[][]) ) );[]
[]BOOST_CHECK[][](![][]BOOST_PP_IS_NULLARY[][]( [][]a[][] ) );[]
[]BOOST_CHECK[][](![][]BOOST_PP_IS_NULLARY[][]( ~ ) );[]

[]BOOST_CHECK[][]( [][]BOOST_PP_IS_UNARY[][]( ([][]x[][]) ) );[]
[]BOOST_CHECK[][]( [][]BOOST_PP_IS_UNARY[][]( (([][]x[][],[][]y[][])) ) );[]
[]BOOST_CHECK[][]( [][]BOOST_PP_IS_UNARY[][]( ([][]x[][])([][]y[][]) ) );[]
[]BOOST_CHECK[][](![][]BOOST_PP_IS_UNARY[][]( [][]3[][] ) );[]
[]BOOST_CHECK[][](![][]BOOST_PP_IS_UNARY[][]( ~ ) );[]
[]// BOOST_CHECK(!BOOST_PP_IS_UNARY( (x,y) ) ); こういう使い方はできない[]

[]BOOST_CHECK[][]( [][]BOOST_PP_IS_BINARY[][]( ([][]x[][],[][]y[][]) ) );[]
[]BOOST_CHECK[][]( [][]BOOST_PP_IS_BINARY[][]( ([][]x[][],[][]y[][])() ) );[]
[]BOOST_CHECK[][]( [][]BOOST_PP_IS_BINARY[][]( ([][]x[][],[][]y[][]) ) );[]
[]BOOST_CHECK[][](![][]BOOST_PP_IS_BINARY[][]( [][]_[][] ) );[]
[]BOOST_CHECK[][](![][]BOOST_PP_IS_BINARY[][]( ~ ) );[]
[]}[]