Similar_type for Vector

So I have a variable v which may take several types, including (at least) Vector{T}, SVector{N,T}, where N is an integer and T is a real type (including at least Int, Rational{Int} and Float64). I want to compute a type similar to v but with element type promoted to some other type Q.

In the case of SVector, the following works: similar_type(v, Q). However, no method is implemented when v is a plain old Vector.

I could override this by defining StaticArrays.similar_type(::Vector, T::Type) = Vector{T} (or, even better, a more general method, although this one does what I want), but this although this feels like fixing something which should have been done, it is still technically type-piracy. Since this is too trivial to reasonably have been an oversight in StaticArrays.jl: is there a good reason why this package does not define similar_type methods for plain Array types?

Isn’t this sort of what similar(v, Q) should do? Or do you require a stricter type match?

similar(v, Q) returns a value; I want a type. Of course, I could call typeof(similar(v,Q)) or even first(Base.return_types(similar,Tuple{typeof(v),Type{Q}})), but the first solution would (probably) allocate an array, while the second is completely inelegant.

The latter is certainly not the right answer as it’s not required to return the narrowest match