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