I don't know whether it is important for Scott, but the following example is failed to compile.
..............
int main() {
typedef make_features<mpl::vector<int, char, double> >::type f1;
typedef make_features<mpl::vector<double, int> >::type f4;
BOOST_MPL_ASSERT((boost::is_base_and_derived<f4, f1>));
}
In other words the order of "features" is taken into account.