1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 // <locale>
10 
11 // template <class charT> class numpunct;
12 
13 // explicit numpunct(size_t refs = 0);
14 
15 #include <locale>
16 #include <cassert>
17 
18 #include "test_macros.h"
19 
20 template <class C>
21 class my_facet
22     : public std::numpunct<C>
23 {
24 public:
25     static int count;
26 
my_facet(std::size_t refs=0)27     explicit my_facet(std::size_t refs = 0)
28         : std::numpunct<C>(refs) {++count;}
29 
~my_facet()30     ~my_facet() {--count;}
31 };
32 
33 template <class C> int my_facet<C>::count = 0;
34 
main(int,char **)35 int main(int, char**)
36 {
37     {
38         std::locale l(std::locale::classic(), new my_facet<char>);
39         assert(my_facet<char>::count == 1);
40     }
41     assert(my_facet<char>::count == 0);
42     {
43         my_facet<char> f(1);
44         assert(my_facet<char>::count == 1);
45         {
46             std::locale l(std::locale::classic(), &f);
47             assert(my_facet<char>::count == 1);
48         }
49         assert(my_facet<char>::count == 1);
50     }
51     assert(my_facet<char>::count == 0);
52 
53 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
54     {
55         std::locale l(std::locale::classic(), new my_facet<wchar_t>);
56         assert(my_facet<wchar_t>::count == 1);
57     }
58     assert(my_facet<wchar_t>::count == 0);
59     {
60         my_facet<wchar_t> f(1);
61         assert(my_facet<wchar_t>::count == 1);
62         {
63             std::locale l(std::locale::classic(), &f);
64             assert(my_facet<wchar_t>::count == 1);
65         }
66         assert(my_facet<wchar_t>::count == 1);
67     }
68     assert(my_facet<wchar_t>::count == 0);
69 #endif // TEST_HAS_NO_WIDE_CHARACTERS
70 
71   return 0;
72 }
73