codecvt_utf8.pass.cpp revision ca8eb830dd5d767d86f6244862c8e1bab3ae6618
1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <codecvt>
11
12// template <class Elem, unsigned long Maxcode = 0x10ffff,
13//           codecvt_mode Mode = (codecvt_mode)0>
14// class codecvt_utf8
15//     : public codecvt<Elem, char, mbstate_t>
16// {
17//     // unspecified
18// };
19
20// Not a portable test
21
22#include <codecvt>
23#include <cstdlib>
24#include <cassert>
25
26int outstanding_news = 0;
27
28void* operator new(std::size_t s) throw(std::bad_alloc)
29{
30    ++outstanding_news;
31    return std::malloc(s);
32}
33
34void  operator delete(void* p) throw()
35{
36    if (p)
37    {
38        --outstanding_news;
39        std::free(p);
40    }
41}
42
43int main()
44{
45    assert(outstanding_news == 0);
46    {
47        typedef std::codecvt_utf8<wchar_t> C;
48        C c;
49        assert(outstanding_news == 0);
50    }
51    {
52        typedef std::codecvt_utf8<wchar_t> C;
53        std::locale loc(std::locale::classic(), new C);
54        assert(outstanding_news != 0);
55    }
56    assert(outstanding_news == 0);
57}
58