]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/22_locale/locale/cons/unicode.cc
Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 22_locale / locale / cons / unicode.cc
CommitLineData
4ffe6e87
BK
1// { dg-require-iconv "ISO-8859-1" }
2
748086b7 3// Copyright (C) 2006, 2007, 2009 Free Software Foundation
4ffe6e87
BK
4//
5// This file is part of the GNU ISO C++ Library. This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
748086b7 8// Free Software Foundation; either version 3, or (at your option)
4ffe6e87
BK
9// any later version.
10
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14// GNU General Public License for more details.
15
16// You should have received a copy of the GNU General Public License along
748086b7
JJ
17// with this library; see the file COPYING3. If not see
18// <http://www.gnu.org/licenses/>.
4ffe6e87
BK
19
20// 22.1.1.2 locale constructors and destructors [lib.locale.cons]
21
22#include <cwchar> // for mbstate_t
23#include <locale>
24#include <stdexcept>
3b476281 25#include <typeinfo>
4ffe6e87
BK
26#include <testsuite_hooks.h>
27#include <ext/codecvt_specializations.h>
28
29typedef std::codecvt<char, char, std::mbstate_t> c_codecvt;
30
31#ifdef _GLIBCXX_USE_WCHAR_T
32typedef std::codecvt<wchar_t, char, std::mbstate_t> w_codecvt;
33#endif
34
35class gnu_facet: public std::locale::facet
36{
37public:
38 static std::locale::id id;
39};
40
41std::locale::id gnu_facet::id;
42
43void test01()
44{
45 using namespace std;
46 typedef unsigned short int_type;
47 typedef char ext_type;
48 typedef __gnu_cxx::encoding_state state_type;
49 typedef codecvt<int_type, ext_type, state_type> unicode_codecvt;
50
51 bool test __attribute__((unused)) = true;
52
53 // unicode_codecvt
54 locale loc01(locale::classic());
55 locale loc13(locale::classic(), new unicode_codecvt);
56 VERIFY( loc01 != loc13 );
57 VERIFY( loc13.name() == "*" );
58 try
59 {
60 VERIFY( has_facet<c_codecvt>(loc13) );
61#ifdef _GLIBCXX_USE_WCHAR_T
62 VERIFY( has_facet<w_codecvt>(loc13) );
63#endif
64 VERIFY( has_facet<unicode_codecvt>(loc13) );
65 }
66 catch(...)
67 { VERIFY( false ); }
68
69 try
70 { use_facet<gnu_facet>(loc13); }
71 catch(bad_cast& obj)
72 { VERIFY( true ); }
73 catch(...)
74 { VERIFY( false ); }
75}
76
77int main()
78{
79 test01();
80 return 0;
81}