У меня есть последовательность типов. Проверить, что все они являются классами и упорядочить их так, чтобы производные классы находились раньше их базовых. Для полученной последовательности проверить, что все классы являются производными от последнего.
Реализовать решение необходимо с помощью Boost::MPL
допустим, у нас дан список типов:
class base1 {};
class child1 : base1 {};
class child2 : child1 {};
class child3 : child2 {};
typedef vector<child2, child1, base1, child3> vec;
Надо, чтобы после применения метафункции получилось: child3, child2, child1, base1
Как я понимаю, надо просто отсортировать вектор, меняя соответствующие типы местами, если первый - предок второго(is_base_of). Подскажите, как реализовать это средствами Boost MPL?