// 5.3.4/19: If the lookup finds the two-parameter form of a usual // deallocation function (3.7.4.2) and that function, considered as a // placement deallocation function, would have been selected as a match for // the allocation function, the program is ill-formed. // But we should only complain about using op delete (void *, size_t) for // placement delete if it would also be selected for normal delete, not if // there's also an op delete (void *). typedef __SIZE_TYPE__ size_t; struct A { A(); void* operator new (size_t, size_t); void operator delete (void *, size_t); // { dg-error "non-placement" } }; struct B { B(); void * operator new (size_t); void * operator new (size_t, size_t); void operator delete (void *); void operator delete (void *, size_t); }; int main() { A* ap = new (24) A; // { dg-error "placement delete" } B* bp = new (24) B; }