As seen in boost::function to implement type erasure but faster than the heap allocated holder object