Stable variadic functions is cool AF!
Vec::into_parts()returns aNonNullpointer, but isn’t the pointer allowed to be null if the vector is empty? I would expect that this method should be able to return a null pointer, but I’m probably missing something…It’s a good question. I believe Vec uses a near-zero pointer but not actually a null pointer for an empty Vec. I think part of the reason is that it makes for better optimisation of Option<Vec<T>> which can then have the same size as Vec<T> with the pointer being null signifying None.
Another big reason is that references are guaranteed not to be null and you can get a &[T] from an empty vec and that reference can’t be null. Even in a non empty vec you need to consider this if T is zero sized.
Ah yes, that makes sense. Curious what it points to then when empty…
I looked it up, it’s a pointer equal to the alignment of the type. So usually some small power of two.
Vec::<u8>::new().as_ptr() = 0x0000000000000001
To add to the other answers. Usually, the easiest way to answer such questions is to click on source. Then in this case, you would immediately see this comment:
// SAFETY: A `Vec` always has a non-null pointer.



