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