1 // { dg-do run  }
2 #include <new>
3 #include <stddef.h>
4 
5 int i;
6 
7 extern "C" int printf (const char *, ...);
8 
9 template <class T, class U>
10 struct map {
11   ~map ();
12 };
13 
14 template <class T, class U>
~map()15 map<T, U>::~map ()
16 {}
17 
18 struct SomeClass { };
19 
operator new(size_t numBytes,SomeClass &,const std::nothrow_t &)20 void* operator new(size_t numBytes, SomeClass&, const std::nothrow_t&) throw()
21 {
22   return operator new(numBytes, std::nothrow);
23 }
24 
operator delete(void * pMemory,SomeClass &,const std::nothrow_t &)25 void operator delete(void* pMemory, SomeClass&, const std::nothrow_t&) throw()
26 {
27   i = 7;
28   return operator delete(pMemory);
29 }
30 
31 int
main()32 main()
33 {
34   map< int, int>* pMap = new map< int, int>;
35 
36   delete pMap;
37 
38   if (i == 7)
39     return 1;
40 }
41