Reverting merge from trunk
[official-gcc.git] / libstdc++-v3 / testsuite / 22_locale / global_templates / standard_facet_hierarchies.cc
blobf39579cd2bc0d0398edd404a87a53ff6499bdc24
1 // Copyright (C) 2007-2013 Free Software Foundation, Inc.
2 //
3 // This file is part of the GNU ISO C++ Library. This library is free
4 // software; you can redistribute it and/or modify it under the
5 // terms of the GNU General Public License as published by the
6 // Free Software Foundation; either version 3, or (at your option)
7 // any later version.
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License along
15 // with this library; see the file COPYING3. If not see
16 // <http://www.gnu.org/licenses/>.
18 #include <string>
19 #include <locale>
20 #include <testsuite_hooks.h>
22 // Based on Langer Kreft "Standard C++ IOStreams and Locales" p 316-318
23 // PR libstdc++/30127
24 // PR libstdc++/34449
25 int main()
27 bool test __attribute__((unused)) = true;
29 using std::locale;
30 using std::has_facet;
31 using std::use_facet;
32 typedef std::ctype<char> base_facet;
33 typedef std::ctype_byname<char> derived_facet;
35 locale loc_c = locale::classic();
36 locale loc_base = loc_c;
37 locale loc_derived(loc_c, new derived_facet("C"));
39 // Standard base facet.
40 VERIFY( has_facet<base_facet>(loc_c) );
41 VERIFY( has_facet<base_facet>(loc_base) );
42 VERIFY( has_facet<base_facet>(loc_derived) );
44 // Standard derived facet.
45 VERIFY( !has_facet<derived_facet>(loc_c) );
46 VERIFY( !has_facet<derived_facet>(loc_base) );
47 VERIFY( has_facet<derived_facet>(loc_derived) );
50 // 1
51 try
53 if (has_facet<derived_facet>(loc_base))
55 use_facet<derived_facet>(loc_base).widen('k');
56 VERIFY( true );
59 catch (...)
61 // Expect no exception.
62 VERIFY( true );
65 // 2
66 try
68 if (has_facet<base_facet>(loc_derived))
69 use_facet<base_facet>(loc_derived).widen('k');
70 else
71 VERIFY( true );
73 catch (...)
75 // Expect no exception.
76 VERIFY( true );
79 return 0;