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 main()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