1d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant//===----------------------------------------------------------------------===//
2d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant//
3d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant//                     The LLVM Compiler Infrastructure
4d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant//
8d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant//===----------------------------------------------------------------------===//
9d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant
10d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant// <locale>
11d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant
12d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant// wstring_convert<Codecvt, Elem, Wide_alloc, Byte_alloc>
13d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant
14d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant// wide_string from_bytes(char byte);
15d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant// wide_string from_bytes(const char* ptr);
16d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant// wide_string from_bytes(const byte_string& str);
17d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant// wide_string from_bytes(const char* first, const char* last);
18d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant
19d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant#include <locale>
20d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant#include <codecvt>
21d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant#include <cassert>
22d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant
23d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnantint main()
24d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant{
25d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant    {
26d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant        std::wstring_convert<std::codecvt_utf8<wchar_t> > myconv;
27d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant        std::string bs("\xF1\x80\x80\x83");
28d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant        std::wstring ws = myconv.from_bytes('a');
29d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant        assert(ws == L"a");
30d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant        ws = myconv.from_bytes(bs.c_str());
31d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant        assert(ws == L"\x40003");
32d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant        ws = myconv.from_bytes(bs);
33d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant        assert(ws == L"\x40003");
34d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant        ws = myconv.from_bytes(bs.data(), bs.data() + bs.size());
35d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant        assert(ws == L"\x40003");
361ca23672a0a694a6979b6e62d7893d8fe019a664Howard Hinnant        ws = myconv.from_bytes("");
371ca23672a0a694a6979b6e62d7893d8fe019a664Howard Hinnant        assert(ws.size() == 0);
38d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant    }
39d23b464e21648e252d5ae501b2db2e93dc02b1f7Howard Hinnant}
40