I am not going to complain about the design. It's good. It just needs sanity checks, which is what I am trying to get out there--that the code lacks sanity checks and that they are good. I'd prefer the callee do the checks, though.
A function with a pointer and size is error prone. It's the C way. Hence, if you can avoid that (and if you are writing C++, then most of the time you CAN), then you SHOULD.
As for how to code a safe function that takes both vectors and arrays--or something else, for that matter--is something I don't know yet. I haven't experimented with it enough because I tend to use minimalist interfaces.