стирание типа. идиома, которая была придумана в C++11 хранить в объекте разные типы, динамически подменяя их она заключается в том, чтобы делать шаблонных наследников от полиморфного базового класса за указателем на родителя прячем шаблонного наследника и за счёт механизма виртуальных функций в рантайме можем подменять тип того, что хранится если неправильно написать тип в std::any_cast, то будет runtime error std::bad_any_cast нужно точное соответствие типа (const и & можно навешивать)

type erasure возможен без виртуальных функций

в std::any это реализовано без виртуальных функций, а статически генерируется тот или иной шаблон (как в std::function, типо vtable вручную написан)