template <typename Numeric, bool IsInteger = std::is_integral<Numeric>::value, bool IsFloat = std::is_floating_point<Numeric>::value>

struct UnsignedOrFloatForSize

This is used for UnsignedAbs, where we need to support floating-point

template instantiations even though we don't actually support the operations.

However, there is no corresponding implementation of e.g. SafeUnsignedAbs,

so the float versions will not compile.