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// class moneypunct_byname<charT, International>
13b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
14b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// charT thousands_sep() const;
15b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
16b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <locale>
17b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <limits>
18b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <cassert>
19b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
20b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include "platform_support.h" // locale name macros
21b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
22b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerclass Fnf
23b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    : public std::moneypunct_byname<char, false>
24b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{
25b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerpublic:
26b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    explicit Fnf(const std::string& nm, std::size_t refs = 0)
27b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        : std::moneypunct_byname<char, false>(nm, refs) {}
28b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner};
29b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
30b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerclass Fnt
31b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    : public std::moneypunct_byname<char, true>
32b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{
33b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerpublic:
34b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    explicit Fnt(const std::string& nm, std::size_t refs = 0)
35b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        : std::moneypunct_byname<char, true>(nm, refs) {}
36b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner};
37b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
38b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerclass Fwf
39b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    : public std::moneypunct_byname<wchar_t, false>
40b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{
41b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerpublic:
42b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    explicit Fwf(const std::string& nm, std::size_t refs = 0)
43b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        : std::moneypunct_byname<wchar_t, false>(nm, refs) {}
44b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner};
45b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
46b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerclass Fwt
47b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    : public std::moneypunct_byname<wchar_t, true>
48b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{
49b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerpublic:
50b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    explicit Fwt(const std::string& nm, std::size_t refs = 0)
51b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        : std::moneypunct_byname<wchar_t, true>(nm, refs) {}
52b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner};
53b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
54b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerint main()
55b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{
56b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
57b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fnf f("C", 1);
58b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == std::numeric_limits<char>::max());
59b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
60b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
61b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fnt f("C", 1);
62b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == std::numeric_limits<char>::max());
63b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
64b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
65b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fwf f("C", 1);
66b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == std::numeric_limits<wchar_t>::max());
67b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
68b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
69b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fwt f("C", 1);
70b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == std::numeric_limits<wchar_t>::max());
71b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
72b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
73b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
74b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fnf f(LOCALE_en_US_UTF_8, 1);
75b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == ',');
76b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
77b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
78b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fnt f(LOCALE_en_US_UTF_8, 1);
79b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == ',');
80b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
81b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
82b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fwf f(LOCALE_en_US_UTF_8, 1);
83b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == L',');
84b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
85b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
86b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fwt f(LOCALE_en_US_UTF_8, 1);
87b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == L',');
88b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
89b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
90b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
91b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fnf f(LOCALE_fr_FR_UTF_8, 1);
92b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == ' ');
93b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
94b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
95b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fnt f(LOCALE_fr_FR_UTF_8, 1);
96b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == ' ');
97b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
98b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
99b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fwf f(LOCALE_fr_FR_UTF_8, 1);
100b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == L' ');
101b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
102b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
103b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fwt f(LOCALE_fr_FR_UTF_8, 1);
104b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == L' ');
105b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
106b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
107b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
108b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fnf f(LOCALE_ru_RU_UTF_8, 1);
109b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == ' ');
110b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
111b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
112b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fnt f(LOCALE_ru_RU_UTF_8, 1);
113b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == ' ');
114b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
115b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
116b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fwf f(LOCALE_ru_RU_UTF_8, 1);
117b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == L' ');
118b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
119b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
120b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fwt f(LOCALE_ru_RU_UTF_8, 1);
121b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == L' ');
122b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
123b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
124b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
125b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fnf f(LOCALE_zh_CN_UTF_8, 1);
126b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == ',');
127b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
128b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
129b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fnt f(LOCALE_zh_CN_UTF_8, 1);
130b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == ',');
131b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
132b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
133b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fwf f(LOCALE_zh_CN_UTF_8, 1);
134b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == L',');
135b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
136b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
137b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        Fwt f(LOCALE_zh_CN_UTF_8, 1);
138b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(f.thousands_sep() == L',');
139b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
140b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner}
141