1b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===//
2b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
3b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//                     The LLVM Compiler Infrastructure
4b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
5b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// This file is dual licensed under the MIT and the University of Illinois Open
6b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// Source Licenses. See LICENSE.TXT for details.
7b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
8b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===//
9b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
10b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// <locale>
11b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
12b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// explicit locale(const string& std_name);
13b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
14b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <locale>
15b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <new>
16b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <cassert>
17b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
18b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include "platform_support.h" // locale name macros
19b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
20b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerint new_called = 0;
21b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
22b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnervoid* operator new(std::size_t s) throw(std::bad_alloc)
23b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{
24b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    ++new_called;
25b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    return std::malloc(s);
26b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner}
27b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
28b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnervoid  operator delete(void* p) throw()
29b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{
30b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    --new_called;
31b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    std::free(p);
32b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner}
33b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
34b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnervoid check(const std::locale& loc)
35b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{
36b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert(std::has_facet<std::collate<char> >(loc));
37b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert(std::has_facet<std::collate<wchar_t> >(loc));
38b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
39b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert(std::has_facet<std::ctype<char> >(loc));
40b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert(std::has_facet<std::ctype<wchar_t> >(loc));
41b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::codecvt<char, char, std::mbstate_t> >(loc)));
42b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::codecvt<char16_t, char, std::mbstate_t> >(loc)));
43b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::codecvt<char32_t, char, std::mbstate_t> >(loc)));
44b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::codecvt<wchar_t, char, std::mbstate_t> >(loc)));
45b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
46b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::moneypunct<char> >(loc)));
47b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::moneypunct<wchar_t> >(loc)));
48b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::money_get<char> >(loc)));
49b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::money_get<wchar_t> >(loc)));
50b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::money_put<char> >(loc)));
51b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::money_put<wchar_t> >(loc)));
52b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
53b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::numpunct<char> >(loc)));
54b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::numpunct<wchar_t> >(loc)));
55b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::num_get<char> >(loc)));
56b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::num_get<wchar_t> >(loc)));
57b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::num_put<char> >(loc)));
58b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::num_put<wchar_t> >(loc)));
59b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
60b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::time_get<char> >(loc)));
61b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::time_get<wchar_t> >(loc)));
62b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::time_put<char> >(loc)));
63b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::time_put<wchar_t> >(loc)));
64b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
65b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::messages<char> >(loc)));
66b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert((std::has_facet<std::messages<wchar_t> >(loc)));
67b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner}
68b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
69b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerint main()
70b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{
71b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
72b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        std::locale loc(std::string(LOCALE_ru_RU_UTF_8));
73b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        check(loc);
74b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        std::locale loc2(std::string(LOCALE_ru_RU_UTF_8));
75b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        check(loc2);
76b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(loc == loc2);
77b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        std::locale loc3(std::string(LOCALE_zh_CN_UTF_8));
78b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        check(loc3);
79b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(!(loc == loc3));
80b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(loc != loc3);
81b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
82b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert(new_called == 0);
83b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner}
84