
dynamic_array<T, A> could be dynamic_value<T[], A>
Then you can distinguish between: dynamic_value<T[], A> // runtime size, stores size dynamic_value<T[N], A> // no need to store size
This actually makes sense, IFF the multi-dimensional case is possible. So if T[] and T[N] are valid, then T[N][M] should also be. This increases the scope greatly but has an incredible difficult questions to answer: What would operator[] return? I don't have a good answer... For names I'd certainly agree with vector and array for container types which are resizeable or non-resizeable respectively. While I see the reasoning in "value", as a "regular" type is implied as opposed to a reference type, I think the name should stay array so it can be recognized as a container.