A trait for a type that can be squared to produce a wider type.
This trait enables squaring operations where the result type has double
the bit width of the input type, preventing overflow in cases where the
result would exceed the input type’s maximum value.