ctor_wchar_t.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi//===----------------------------------------------------------------------===// 227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi// 327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi// The LLVM Compiler Infrastructure 427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi// 527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi// This file is dual licensed under the MIT and the University of Illinois Open 627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi// Source Licenses. See LICENSE.TXT for details. 727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi// 827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi//===----------------------------------------------------------------------===// 927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 1027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi// <locale> 1127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 1227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi// template <> class codecvt<wchar_t, char, mbstate_t> 1327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 1427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi// explicit codecvt(size_t refs = 0); 1527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 1627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <locale> 1727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <cassert> 1827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 1927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshitypedef std::codecvt<wchar_t, char, std::mbstate_t> F; 2027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 2127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass my_facet 2227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi : public F 2327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi{ 2427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic: 253473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi static int count; 2627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 2727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi explicit my_facet(std::size_t refs = 0) 2827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi : F(refs) {++count;} 2927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 3027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi ~my_facet() {--count;} 3127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}; 3227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 3327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiint my_facet::count = 0; 3427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 3527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiint main() 3627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi{ 3727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi { 3827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi std::locale l(std::locale::classic(), new my_facet); 3927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi assert(my_facet::count == 1); 4027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi } 4127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi assert(my_facet::count == 0); 4227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi { 4327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi my_facet f(1); 4427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi assert(my_facet::count == 1); 4527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi { 4627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi std::locale l(std::locale::classic(), &f); 4727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi assert(my_facet::count == 1); 4827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi } 4927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi assert(my_facet::count == 1); 5027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi } 5127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi assert(my_facet::count == 0); 5227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi} 5327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi