I mean something like this:
std::vector<T> v(0);
Is it ok? I don't see any requirements like this in the Standard.
This is well-defined. The standard does not place any restrictions on the value of n passed to this constructor. 0 is a valid value of type size_type (whatever that is).
size_type to be an unsigned integer type. In reality this is unsigned long (at least for stdlibc++).