[PATCH] Fallback to operator new for MSVC compatibility

Aaron Ballman aaron at aaronballman.com
Tue May 28 16:50:19 PDT 2013


On Tue, May 28, 2013 at 6:07 PM, Richard Smith <richard at metafoo.co.uk> wrote:
> What does MSVC think about:
>
> void *operator new(unsigned int size, arbitrary_t);
> void operator delete[](unsigned int size, arbitrary_t) = delete;
> struct S { S(); };
> S *p = new (arbitrary) S[5];
>
> ? Will it call the (deleted) operator delete[] even though it picked a
> non-array operator new?

MSVC doesn't support deleted functions as of right now, so it just errors out.

> What if there is an array new but no array delete?

struct arbitrary_t {} arbitrary;
void *operator new(unsigned int size, arbitrary_t);

void f() {
  int *p = new(arbitrary) int[4];
  int *p2 = new(arbitrary) int;

  delete [] p;
  delete p2;
}

Yields calls to:

call ??3 at YAXPAX@Z ; operator delete

for both p and p2, so it falls back on the global delete.

~Aaron



More information about the cfe-commits mailing list