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