#include #include #include #include #include #include #include #include namespace mpl=boost::mpl; template struct eraseVal { template struct eraseValRecurse: eraseVal::type,T> {}; typedef typename mpl::find::type iter; typedef typename mpl::eval_if< boost::is_same::type>, mpl::identity, eraseValRecurse >::type type; }; template struct eraseVal2:mpl::copy_if > > {}; /**** testing ****/ #include #include #include template class EraseValAlgorithm> struct testEraseValAlgorithm { typedef mpl::vector v1; typedef typename EraseValAlgorithm::type v2; BOOST_MPL_ASSERT(( mpl::equal > )); typedef typename EraseValAlgorithm::type v3; BOOST_MPL_ASSERT(( mpl::equal > )); typedef typename EraseValAlgorithm::type v4; BOOST_MPL_ASSERT(( mpl::equal > )); typedef typename EraseValAlgorithm::type v5; BOOST_MPL_ASSERT(( mpl::equal > )); }; template testEraseValAlgorithm; template testEraseValAlgorithm; int main(){}