// { dg-do run } #include template struct S { void *operator new (size_t); void *operator new (size_t, int); void operator delete (void*); }; static void* s[2]; template <> void* S::operator new (size_t b) { s[0] = ::operator new(b); return s[0]; } template <> void* S::operator new (size_t b, int) { s[1] = ::operator new(b); return s[1]; } template <> void S::operator delete (void*) { } int main() { S* s1 = new S; S* s2 = new(3) S; if (s1 != s[0] || s2 != s[1]) return 1; delete s1; delete s2; }