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