a lot of the most used type erasure things aren't implemented with inheritance because they're usually erasing a very small interface
im not sure it's still true. we have constexpr virtual now and that helps with inlining and devirtualization. it maybe faster