Is this a bug? Trying to get effect of static_assert

It's not a "downside", it's also intentional. Your const-based solution would cause a post-monomorphization error, ie. it wouldn't be guaranteed that once the body of the function is typechecked, it will compile for every suitable instantiation. That has proven to be way more confusing than useful, especially in library code, when one can't reasonably expect and test every foreseeable correct use, since there is an open set of types one may be able to instantiate generics with.

Having to put trait bounds on your types when you require specific capabilities explicitly indicates what you need from a type, like a contract. This upfront checking ensures precise and good error messages at the call site, which is much easier to debug.