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 // <locale>
11 
12 // class moneypunct<charT, International>
13 
14 // pattern pos_format() const;
15 
16 #include <locale>
17 #include <limits>
18 #include <cassert>
19 
20 typedef std::moneypunct<char> F;
21 
22 class Fnf
23     : public std::moneypunct<char, false>
24 {
25 public:
Fnf(std::size_t refs=0)26     explicit Fnf(std::size_t refs = 0)
27         : std::moneypunct<char, false>(refs) {}
28 };
29 
30 class Fnt
31     : public std::moneypunct<char, true>
32 {
33 public:
Fnt(std::size_t refs=0)34     explicit Fnt(std::size_t refs = 0)
35         : std::moneypunct<char, true>(refs) {}
36 };
37 
38 class Fwf
39     : public std::moneypunct<wchar_t, false>
40 {
41 public:
Fwf(std::size_t refs=0)42     explicit Fwf(std::size_t refs = 0)
43         : std::moneypunct<wchar_t, false>(refs) {}
44 };
45 
46 class Fwt
47     : public std::moneypunct<wchar_t, true>
48 {
49 public:
Fwt(std::size_t refs=0)50     explicit Fwt(std::size_t refs = 0)
51         : std::moneypunct<wchar_t, true>(refs) {}
52 };
53 
main()54 int main()
55 {
56     {
57         Fnf f(1);
58         std::money_base::pattern p = f.pos_format();
59         assert(p.field[0] == std::money_base::symbol);
60         assert(p.field[1] == std::money_base::sign);
61         assert(p.field[2] == std::money_base::none);
62         assert(p.field[3] == std::money_base::value);
63     }
64     {
65         Fnt f(1);
66         std::money_base::pattern p = f.pos_format();
67         assert(p.field[0] == std::money_base::symbol);
68         assert(p.field[1] == std::money_base::sign);
69         assert(p.field[2] == std::money_base::none);
70         assert(p.field[3] == std::money_base::value);
71     }
72     {
73         Fwf f(1);
74         std::money_base::pattern p = f.pos_format();
75         assert(p.field[0] == std::money_base::symbol);
76         assert(p.field[1] == std::money_base::sign);
77         assert(p.field[2] == std::money_base::none);
78         assert(p.field[3] == std::money_base::value);
79     }
80     {
81         Fwt f(1);
82         std::money_base::pattern p = f.pos_format();
83         assert(p.field[0] == std::money_base::symbol);
84         assert(p.field[1] == std::money_base::sign);
85         assert(p.field[2] == std::money_base::none);
86         assert(p.field[3] == std::money_base::value);
87     }
88 }
89