К сожалению, это невозможно в C ++ 14. Я надеюсь, что у нас будет такая языковая особенность в C ++ 17. Поскольку у вас уже есть несколько обходных путей для вашей проблемы, я не буду предлагать решение.
Я хотел бы отметить, что формулировка должна быть «расширение», а не «наследование». Расширение допускает большее количество значений (когда вы переходите от 3 до 6 значений в вашем примере), тогда как наследование означает наложение большего количества ограничений на данный базовый класс, так что набор возможностей уменьшается. Следовательно, потенциальное приведение будет работать с точностью до наследства. Вы можете привести производный класс к базовому классу, а не наоборот с наследованием класса. Но при наличии расширений вы «должны» иметь возможность приводить базовый класс к его расширению, а не наоборот. Я говорю «должен», потому что, как я уже сказал, такой языковой функции по-прежнему не существует.