Here the problem is I can't write like this: [Vec::new(); 5]. This would give me a compiler error. I have to repeat Vec::new() five times to initialize the array. So, Is there any macro which does this?
Conservatism to make implementation feasible. From the RFC (and the PR has more discussion):
Another alternative is to allow a more expansive set of values is_const(expr) rather than is_rvalue_promotable(expr) . A consequence of this is that checking constness would be done earlier on the HIR. Instead, checking if expr is rvalue promotable can be done on the MIR and does not require significant changes to the compiler. If we decide to expand to is_const(expr) in the future, we may still do so as the changes proposed in this RFC are compatible with such future changes.
IIRC part of this is whether [foo(); 4] calls foo() once (and Copys) or multiple times. Right now I think you can't tell, but as const fn potentially expands to more things then maybe it could matter.
But in the future [const { Vec::new() }, 4] will work (RFC #2920), as will <[_, 4]>::generate(Vec::new) (PR #75644).