The #undef values in arrays are only for “pointer types” that cannot be stored in arrays inline, like mutable structs and such. Bits types have always just given you uninitialized memory in this situation.
Okay, that makes sense. I seem to recall being given deprecation warnings about e.g. Vector{Int}(20), which should be changed to Vector{Int}(undef, 20). That seems a bit hard line if the undef has no effect.
We don’t want exposing undefined memory to be a silent default. The Vector{Int}(n) constructor will be reclaimed in the future: in general, Vector(x) will construct a vector by iterating x and Vector{T}(x) will construct a Vector{T} by iterating x.
Strictly speaking, how can you tell if it has no effect (with bits types)? It is literally undefined, so it may as well be 0 or equivalent. You just can’t rely on it.