can be used to represent a `std::vector<int>`, a `std::list<int>` or many other types.
The __type_erasure_article__ covers the motivation and goals of type erasure in this context. Clearly
my implementation is building upon a lot of prior art created by others. Thomas Becker's `any_iterator` was a strong
influence. Adobe also have an `any_iterator` implementation, but this has very tight coupling to other parts of the
library that precluded it from use in Boost.Range.
Early development versions of this Range Adaptor directly used Thomas Becker's any_iterator implementation.
Subsequently I discovered that the heap allocations of this and many other implementations cause poor
speed performance particularly at the tails of the distribution. To solve this required a new design that
incorporated the embedded buffer optimization.
Despite the underlying `any_iterator` being the fastest available implementation, the performance overhead of `any_range` is still appreciable due to the cost of virtual function calls required to implement `increment`, `decrement`, `advance`, `equal` etc. Frequently a better design choice is to convert to a canonical form.
Please see the __range_adaptors_type_erased__ for a Range Adaptor that returns `any_range` instances.