1 // { dg-require-cxa-atexit "" }
3 // Copyright (C) 2004, 2005 Free Software Foundation, Inc.
5 // This file is part of the GNU ISO C++ Library. This library is free
6 // software; you can redistribute it and/or modify it under the
7 // terms of the GNU General Public License as published by the
8 // Free Software Foundation; either version 2, or (at your option)
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License along
17 // with this library; see the file COPYING. If not, write to the Free
18 // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
21 // 20.4.1.1 allocator members
25 #include <ext/mt_allocator.h>
34 // NB: Using a pool that attempts to clean up resource use.
37 printf("allocation/deallocation count is %zu \n", count
);
38 throw std::runtime_error("allocation/deallocation count isn't zero");
43 static count_check check
;
45 void* operator new(size_t size
) throw(std::bad_alloc
)
47 printf("operator new is called \n");
48 void* p
= malloc(size
);
50 throw std::bad_alloc();
55 void operator delete(void* p
) throw()
57 printf("operator delete is called \n");
63 template<bool _Thread
>
64 struct cleanup_pool
: public __gnu_cxx::__pool
<false>
66 cleanup_pool() : __gnu_cxx::__pool
<false>() { }
68 cleanup_pool(const __gnu_cxx::__pool_base::_Tune
& t
)
69 : __gnu_cxx::__pool
<false>(t
) { }
71 ~cleanup_pool() throw() { this->_M_destroy(); }
74 typedef char value_type
;
75 typedef std::char_traits
<value_type
> traits_type
;
76 using __gnu_cxx::__pool
;
77 using __gnu_cxx::__per_type_pool_policy
;
78 typedef __per_type_pool_policy
<value_type
, cleanup_pool
, false> policy_type
;
79 typedef __gnu_cxx::__mt_alloc
<value_type
, policy_type
> allocator_type
;
80 typedef std::basic_string
<value_type
, traits_type
, allocator_type
> string_type
;