On Tue, May 28, 2013 at 6:07 PM, Richard Smith <[email protected]> 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@YAXPAX@Z ; operator delete
for both p and p2, so it falls back on the global delete.
~Aaron
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits