D
namespace details
{
static std::uint8_t id_provider()
{
static std::uint8_t counter = 0;
return counter++;
}
template <class T>
std::uint8_t type_id()
{
static std::uint8_t id = id_provider();
return id;
}
}
class Any
{
...
template <class T>
T* Get()
{
assert(details::type_id<T>() == m_type_id);
return ...;
}
...
std::aligned_storage<64, 8> m_small_storage;
std::uint8_t m_type_id = -1;
}