conditional_hash_cast
template <typename is_hash_base> struct conditional_hash_cast
Conditionally cast a type to Hash, if Hash is a base class, but disallow this for shared pointers of these types. Will result in a compiler error if this is attempted.
Any type not derived from Hash is simply returned as is.