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 21 #include "test_macros.h" 22 23 int main() 24 { 25 typedef std::codecvt_utf8<wchar_t> Codecvt; 26 typedef std::wstring_convert<Codecvt> Myconv; 27 #if TEST_STD_VER > 11 28 static_assert(!std::is_convertible<std::string, Myconv>::value, ""); 29 static_assert( std::is_constructible<Myconv, std::string>::value, ""); 30 #endif 31 #ifndef TEST_HAS_NO_EXCEPTIONS 32 { 33 Myconv myconv; 34 try 35 { 36 TEST_IGNORE_NODISCARD myconv.to_bytes(L"\xDA83"); 37 assert(false); 38 } 39 catch (const std::range_error&) 40 { 41 } 42 try 43 { 44 TEST_IGNORE_NODISCARD myconv.from_bytes('\xA5'); 45 assert(false); 46 } 47 catch (const std::range_error&) 48 { 49 } 50 } 51 #endif 52 { 53 Myconv myconv("byte error"); 54 std::string bs = myconv.to_bytes(L"\xDA83"); 55 assert(bs == "byte error"); 56 #ifndef TEST_HAS_NO_EXCEPTIONS 57 try 58 { 59 TEST_IGNORE_NODISCARD myconv.from_bytes('\xA5'); 60 assert(false); 61 } 62 catch (const std::range_error&) 63 { 64 } 65 #endif 66 } 67 { 68 Myconv myconv("byte error", L"wide error"); 69 std::string bs = myconv.to_bytes(L"\xDA83"); 70 assert(bs == "byte error"); 71 std::wstring ws = myconv.from_bytes('\xA5'); 72 assert(ws == L"wide error"); 73 } 74 } 75