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// template <> class codecvt_byname<char32_t, char, mbstate_t>
13b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
14b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// explicit codecvt_byname(const char* nm, size_t refs = 0);
15b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// explicit codecvt_byname(const string& nm, size_t refs = 0);
16b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
17b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <locale>
18b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <cassert>
19b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
20b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnertypedef std::codecvt_byname<char32_t, char, std::mbstate_t> F;
21b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
22b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerclass my_facet
23b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    : public F
24b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{
25b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerpublic:
26b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    static int count;
27b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
28b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    explicit my_facet(const char* nm, std::size_t refs = 0)
29b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        : F(nm, refs) {++count;}
30b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    explicit my_facet(const std::string& nm, std::size_t refs = 0)
31b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        : F(nm, refs) {++count;}
32b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
33b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    ~my_facet() {--count;}
34b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner};
35b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
36b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerint my_facet::count = 0;
37b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
38b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerint main()
39b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{
40b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
41b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        std::locale l(std::locale::classic(), new my_facet("en_US"));
42b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(my_facet::count == 1);
43b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
44b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert(my_facet::count == 0);
45b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
46b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        my_facet f("en_US", 1);
47b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(my_facet::count == 1);
48b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        {
49b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            std::locale l(std::locale::classic(), &f);
50b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            assert(my_facet::count == 1);
51b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        }
52b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(my_facet::count == 1);
53b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
54b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert(my_facet::count == 0);
55b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
56b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        std::locale l(std::locale::classic(), new my_facet(std::string("en_US")));
57b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(my_facet::count == 1);
58b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
59b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert(my_facet::count == 0);
60b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
61b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        my_facet f(std::string("en_US"), 1);
62b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(my_facet::count == 1);
63b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        {
64b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            std::locale l(std::locale::classic(), &f);
65b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            assert(my_facet::count == 1);
66b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        }
67b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(my_facet::count == 1);
68b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
69b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    assert(my_facet::count == 0);
70b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner}
71