//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template <> class ctype // ~ctype(); #include #include #include unsigned delete_called = 0; void* operator new[](size_t sz) throw(std::bad_alloc) { return operator new(sz); } void operator delete[](void* p) throw() { operator delete(p); ++delete_called; } int main() { { delete_called = 0; std::locale l(std::locale::classic(), new std::ctype); assert(delete_called == 0); } assert(delete_called == 0); { std::ctype::mask table[256]; delete_called = 0; std::locale l(std::locale::classic(), new std::ctype(table)); assert(delete_called == 0); } assert(delete_called == 0); { delete_called = 0; std::locale l(std::locale::classic(), new std::ctype(new std::ctype::mask[256], true)); assert(delete_called == 0); } assert(delete_called == 1); }