
Daniel Frey wrote:
I think operator new is intended to be called by new T. As zero sized types don't exist, operator new will never be called with n==0.
But there's nothing which prevents you from calling operator new directly, so maybe it's even possible for operator new.
What do the experts say? Was this intended or is it a defect report? Or am I missing something?
(Note: I'm not talking about operator new[], which can be asked to allocate an array of zero objects as per 5.3.4/7)
Hmm, what you're saying sounds reasonable, but nevertheless I was observing an exception due to a zero sized request somehow generated by the standard library implemenation on my platform. 18.4.1.1 defines the effects of operator new() as follows: 'The allocation function (3.7.3.1) called by a new-expression (5.3.4) to allocate size bytes of storage suitably aligned to represent any object of that size.' An allocation function must comply to the behaviour required in 3.7.3.1, therefore I would think that operator new() has to comply to this behaviour as well. And nothing forbids others callers (besides the new-expression) of operator new(), AFAICT. Markus