Don't use assertions to enforce the limits on SIMD lanes in a type, Type is too fundamental for that. Instead, the Vector-forming by() method returns an Optional<Type>, and None if the requested SIMD vector is not valid. Same for Type::half_vector().