On 3/23/07, Scott Meyers <usenet@aristeia.com> wrote:
// return Seq with the first occurrance of T removed template<typename Seq, typename T> struct erase_first { // i = Seq.find(T) typedef typename mpl::find<Seq, T>::type i;
// found = (i == Seq.end()) ? false : true typedef typename mpl::if_< typename boost::is_same<i, typename mpl::end<Seq>::type >::type, mpl::false_, mpl::true_ >::type found;
// type = found ? Seq : Seq.erase(i)
// type = found ? Seq.erase(i) : Seq
typedef typename mpl::if_<found, Seq, typename mpl::erase<Seq, i>::type >::type type;
typedef typename if_<found, typename mpl::erase<Seq, i>::type, Seq >::type type;
};
BOOST_MPL_ASSERT(( mpl::equal< erase_first<set1, A>::type, erase_first<set2, A>::type
));
Or did I misunderstand? Tony