1// { dg-do run } 2#include <cstddef> 3 4template <class T> 5struct S { 6 void *operator new (size_t); 7 void *operator new (size_t, int); 8 void operator delete (void*); 9}; 10 11static void* s[2]; 12 13template <> 14void* S<int>::operator new (size_t b) 15{ 16 s[0] = ::operator new(b); 17 return s[0]; 18} 19 20template <> 21void* S<int>::operator new (size_t b, int) 22{ 23 s[1] = ::operator new(b); 24 return s[1]; 25} 26 27template <> 28void S<int>::operator delete (void*) 29{ 30} 31 32int main() 33{ 34 S<int>* s1 = new S<int>; 35 S<int>* s2 = new(3) S<int>; 36 37 if (s1 != s[0] || s2 != s[1]) 38 return 1; 39 40 delete s1; 41 delete s2; 42} 43