ctor.pass.cpp revision f5256e16dfc425c1d466f6308d4026d529ce9e0b
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// <locale>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// class num_get<charT, InputIterator>
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// explicit num_get(size_t refs = 0);
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <locale>
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cassert>
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::num_get<char, char*> F;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class my_facet
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    : public F
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles){
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)public:
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static int count;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    explicit my_facet(std::size_t refs = 0)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        : F(refs) {++count;}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ~my_facet() {--count;}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int my_facet::count = 0;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35int main()
36{
37    {
38        std::locale l(std::locale::classic(), new my_facet);
39        assert(my_facet::count == 1);
40    }
41    assert(my_facet::count == 0);
42    {
43        my_facet f(1);
44        assert(my_facet::count == 1);
45        {
46            std::locale l(std::locale::classic(), &f);
47            assert(my_facet::count == 1);
48        }
49        assert(my_facet::count == 1);
50    }
51    assert(my_facet::count == 0);
52}
53