//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template <> class codecvt_byname // explicit codecvt_byname(const char* nm, size_t refs = 0); // explicit codecvt_byname(const string& nm, size_t refs = 0); #include #include #include "platform_support.h" // locale name macros typedef std::codecvt_byname F; class my_facet : public F { public: static int count; explicit my_facet(const char* nm, std::size_t refs = 0) : F(nm, refs) {++count;} explicit my_facet(const std::string& nm, std::size_t refs = 0) : F(nm, refs) {++count;} ~my_facet() {--count;} }; int my_facet::count = 0; int main() { { std::locale l(std::locale::classic(), new my_facet(LOCALE_en_US_UTF_8)); assert(my_facet::count == 1); } assert(my_facet::count == 0); { my_facet f(LOCALE_en_US_UTF_8, 1); assert(my_facet::count == 1); { std::locale l(std::locale::classic(), &f); assert(my_facet::count == 1); } assert(my_facet::count == 1); } assert(my_facet::count == 0); { std::locale l(std::locale::classic(), new my_facet(std::string(LOCALE_en_US_UTF_8))); assert(my_facet::count == 1); } assert(my_facet::count == 0); { my_facet f(std::string(LOCALE_en_US_UTF_8), 1); assert(my_facet::count == 1); { std::locale l(std::locale::classic(), &f); assert(my_facet::count == 1); } assert(my_facet::count == 1); } assert(my_facet::count == 0); }