[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