43 static const char*
const
64 for (
const char*
const *names = locale_names; ; ) {
66 german = std::locale (names [0]);
69 catch (std::runtime_error&) {
89 locale = make_named_locale ();
91 catch (std::runtime_error&
e) {
93 std::cerr <<
"Caught runtime_error:\n";
94 std::cerr <<
e.what () <<
'\n';
99 std::cerr <<
"Caught an unknown exception\n";
106 std::locale::global (locale);
109 std::wcout.imbue (locale);
111 std::wcout <<
"Wide character classification in "
112 << locale.name ().c_str () <<
" locale.\n";
117 int mismatch_count = 0;
124 for (std::wint_t wi = 0; wi < std::wint_t (256); ++wi) {
127 const wchar_t wc (wi);
135 cxx_class [
i++] = (std::isalnum)(wc, locale) ?
'A' :
'-';
136 cxx_class [
i++] = (std::isalpha)(wc, locale) ?
'a' :
'-';
137 cxx_class [
i++] = (std::iscntrl)(wc, locale) ?
'C' :
'-';
138 cxx_class [
i++] = (std::isdigit)(wc, locale) ?
'D' :
'-';
139 cxx_class [
i++] = (std::isgraph)(wc, locale) ?
'G' :
'-';
140 cxx_class [
i++] = (std::islower)(wc, locale) ?
'L' :
'-';
141 cxx_class [
i++] = (std::isprint)(wc, locale) ?
'P' :
'-';
142 cxx_class [
i++] = (std::ispunct)(wc, locale) ?
'p' :
'-';
143 cxx_class [
i++] = (std::isspace)(wc, locale) ?
'S' :
'-';
144 cxx_class [
i++] = (std::isupper)(wc, locale) ?
'U' :
'-';
145 cxx_class [
i++] = (std::isxdigit)(wc, locale) ?
'X' :
'-';
150 c_class [
i++] = (std::iswalnum)(wc) ?
'A' :
'-';
151 c_class [
i++] = (std::iswalpha)(wc) ?
'a' :
'-';
152 c_class [
i++] = (std::iswcntrl)(wc) ?
'C' :
'-';
153 c_class [
i++] = (std::iswdigit)(wc) ?
'D' :
'-';
154 c_class [
i++] = (std::iswgraph)(wc) ?
'G' :
'-';
155 c_class [
i++] = (std::iswlower)(wc) ?
'L' :
'-';
156 c_class [
i++] = (std::iswprint)(wc) ?
'P' :
'-';
157 c_class [
i++] = (std::iswpunct)(wc) ?
'p' :
'-';
158 c_class [
i++] = (std::iswspace)(wc) ?
'S' :
'-';
159 c_class [
i++] = (std::iswupper)(wc) ?
'U' :
'-';
160 c_class [
i++] = (std::iswxdigit)(wc) ?
'X' :
'-';
164 std::wcout <<
" '\\" << std::setw (3)
165 << std::setfill (
L'0') << std::oct << wi
166 <<
"' ('" << ((std::isprint)(wc, locale) ? wc :
L' ')
169 bool mismatch =
false;
172 for (
i = 0;
i !=
sizeof cxx_class; ++
i) {
174 if (cxx_class [
i] == c_class [
i])
175 std::wcout << cxx_class [
i] <<
' ';
177 std::wcout << cxx_class [
i] <<
':' << c_class [
i] <<
' ';
183 std::wcout <<
" *** C/C++ mismatch ***";
192 return mismatch_count ? 1 : 0;