1//===----------------------------------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is dual licensed under the MIT and the University of Illinois Open 6// Source Licenses. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10// <locale> 11 12// wstring_convert<Codecvt, Elem, Wide_alloc, Byte_alloc> 13 14// wstring_convert(const byte_string& byte_err, 15// const wide_string& wide_err = wide_string()); 16 17#include <locale> 18#include <codecvt> 19#include <cassert> 20 21int main() 22{ 23 typedef std::codecvt_utf8<wchar_t> Codecvt; 24 typedef std::wstring_convert<Codecvt> Myconv; 25#if _LIBCPP_STD_VER > 11 26 static_assert(!std::is_convertible<std::string, Myconv>::value, ""); 27 static_assert( std::is_constructible<Myconv, std::string>::value, ""); 28#endif 29 { 30 Myconv myconv; 31 try 32 { 33 myconv.to_bytes(L"\xDA83"); 34 assert(false); 35 } 36 catch (const std::range_error&) 37 { 38 } 39 try 40 { 41 myconv.from_bytes('\xA5'); 42 assert(false); 43 } 44 catch (const std::range_error&) 45 { 46 } 47 } 48 { 49 Myconv myconv("byte error"); 50 std::string bs = myconv.to_bytes(L"\xDA83"); 51 assert(bs == "byte error"); 52 try 53 { 54 myconv.from_bytes('\xA5'); 55 assert(false); 56 } 57 catch (const std::range_error&) 58 { 59 } 60 } 61 { 62 Myconv myconv("byte error", L"wide error"); 63 std::string bs = myconv.to_bytes(L"\xDA83"); 64 assert(bs == "byte error"); 65 std::wstring ws = myconv.from_bytes('\xA5'); 66 assert(ws == L"wide error"); 67 } 68} 69