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 // template <class charT> class collate; 13 14 // explicit collate(size_t refs = 0); 15 16 #include <locale> 17 #include <type_traits> 18 #include <cassert> 19 20 template <class C> 21 class my_facet 22 : public std::collate<C> 23 { 24 public: 25 static int count; 26 27 explicit my_facet(std::size_t refs = 0) 28 : std::collate<C>(refs) {++count;} 29 30 ~my_facet() {--count;} 31 }; 32 33 template <class C> int my_facet<C>::count = 0; 34 35 int main() 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 std::locale l(std::locale::classic(), new my_facet<wchar_t>); 54 assert(my_facet<wchar_t>::count == 1); 55 } 56 assert(my_facet<wchar_t>::count == 0); 57 { 58 my_facet<wchar_t> f(1); 59 assert(my_facet<wchar_t>::count == 1); 60 { 61 std::locale l(std::locale::classic(), &f); 62 assert(my_facet<wchar_t>::count == 1); 63 } 64 assert(my_facet<wchar_t>::count == 1); 65 } 66 assert(my_facet<wchar_t>::count == 0); 67 } 68