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