Boost.Variant 型かのチェック
is_variant 的な。
#include <boost/variant/variant.hpp> #include <boost/mpl/bool.hpp> template<typename T> struct is_variant : boost::mpl::false_{}; template<BOOST_VARIANT_ENUM_PARAMS(typename T)> struct is_variant<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> > : boost::mpl::true_{}; #include <boost/mpl/assert.hpp> BOOST_MPL_ASSERT(( is_variant<boost::variant<int, float, char> > )); BOOST_MPL_ASSERT(( is_variant<boost::variant<int, boost::variant<int, float> > > )); BOOST_MPL_ASSERT_NOT(( is_variant<void*> )); BOOST_MPL_ASSERT_NOT(( is_variant<int> )); BOOST_MPL_ASSERT(( is_variant<boost::variant<> > )); int main(){}
ideone からのコピペプログラミング。
思ったよりもすっきりしている。
[boost]
ver 1.46.1
[参照]
http://ideone.com/BGh58h