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