In this recipe, we will learn what the type erasure pattern is in C++, and how we can leverage it to generically erase type information without sacrificing type-safety or requiring our types to inherit pure virtual base classes. This recipe is important as the type erasure pattern is used heavily in the C++ Standard Library and provides a simple way to encapsulate data types that do not share anything in common, other than providing a similar set of APIs, while still supporting things such as containers.