Hi all, I'm trying to use mpl::remove to do some processing with a template parameter, like this template<typename T0, typename T1=null_type, ... typename Tn=null_type> struct my_class { typedef mpl::vector<T0, T1,...Tn> my_vector; typedef mpl::remove<my_vector, null_type>::type my_non_vector; //failed here }; Compiler report that my_vector is not derive from my_class<T0, T1,..Tn>. It seems that 'remove' would test the sequence at once, and my_vector still un_known yet, so it fails, is this guess right? //-------------------------------------------------------------------------- And I've tried this fusion too: teypdef vector<Class1, Class2, null_type, null_type> vec; vec v; fusion::for_each<v, print>; it seems that it iterate 4 times, not 2, even size(vec) return 2. It seems only evaluate will skip null_type, iterate will go through all member, is my guess right? Best Regards Spider