Проблема в том, что апкаст/даункаст здесь не решение, а вынужденный костыль.
Учитывая насколько много и широко используются те же маркер-трейты в расте с доп. zst-параметрами для кодирования тех или иных инвариантов, то ты можешь представить ergonomic impact от того, что нужно порождать новый тип (класс) на каждый подобный кейс + апкастить/даункастить по кд.
Первое Забыл вызвать реализацию super (иногда необходимо), изменил поля неожиданным образом, проблемы с деструкторами (c++) Второе Ой, не смеши. Поэтому она называется a diamond of death. Третье Раст не наследует поведение, так же, как трейты не наследуют друг друга