1) Do you expect warnings?
2) Yes
there's no reason why it shouldn't compile.
delete[]
is necessary because arrays have another header (the number of lements for the destructor). If there's not destructor it might be the same(?)
According to that link
dereferencing a pointer returned as a request for zero size is undefined
As long as you don't dereference it, it would be fine. So you may avoid checks like in vector::vector(size_t)