Remove old autovect-branch by moving to "dead" directory.
[official-gcc.git] / old-autovect-branch / libstdc++-v3 / testsuite / ext / mt_allocator / deallocate_local-6.cc
blob66ad3063cce91e8ee35f5adfc5ab28cca86979a0
1 // { dg-require-cxa-atexit "" }
3 // Copyright (C) 2004, 2005 Free Software Foundation, Inc.
4 //
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)
9 // any later version.
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,
19 // USA.
21 // 20.4.1.1 allocator members
23 #include <string>
24 #include <stdexcept>
25 #include <ext/mt_allocator.h>
27 static size_t count;
29 struct count_check
31 count_check() { }
32 ~count_check()
34 // NB: Using a pool that attempts to clean up resource use.
35 if (count != 0)
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);
49 if (p == NULL)
50 throw std::bad_alloc();
51 count++;
52 return p;
55 void operator delete(void* p) throw()
57 printf("operator delete is called \n");
58 if (p == NULL)
59 return;
60 count--;
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(); }
75 typedef char value_type;
76 typedef std::char_traits<value_type> traits_type;
77 typedef __gnu_cxx::__common_pool_policy<cleanup_pool, false> policy_type;
78 typedef __gnu_cxx::__mt_alloc<value_type, policy_type> allocator_type;
79 typedef std::basic_string<value_type, traits_type, allocator_type> string_type;
81 int main()
83 string_type s;
84 s += "bayou bend";
85 return 0;