ctor_err_string.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
1e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng//===----------------------------------------------------------------------===// 2d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner// 3d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner// The LLVM Compiler Infrastructure 4d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner// 5d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner// This file is dual licensed under the MIT and the University of Illinois Open 6d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner// Source Licenses. See LICENSE.TXT for details. 7d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner// 8d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner//===----------------------------------------------------------------------===// 9d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner 1022fee2dff4c43b551aefa44a96ca74fcade6bfacEvan Cheng// <locale> 110ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach 12d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner// wstring_convert<Codecvt, Elem, Wide_alloc, Byte_alloc> 13d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner 14d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner// wstring_convert(const byte_string& byte_err, 15e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng// const wide_string& wide_err = wide_string()); 16e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng 17d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner#include <locale> 181f6efa3996dd1929fbc129203ce5009b620e6969Michael J. Spencer#include <codecvt> 1999405df044f2c584242e711cc9023ec90356da82Bruno Cardoso Lopes#include <cassert> 20d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner 21d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattnerint main() 22d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner{ 23d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner typedef std::codecvt_utf8<wchar_t> Codecvt; 24d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner typedef std::wstring_convert<Codecvt> Myconv; 250ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach { 26e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng Myconv myconv; 2706801722a43c697eff0acee905de6b50257ce19bJim Grosbach try 28d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner { 2906801722a43c697eff0acee905de6b50257ce19bJim Grosbach myconv.to_bytes(L"\xDA83"); 3006801722a43c697eff0acee905de6b50257ce19bJim Grosbach assert(false); 31d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner } 320ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach catch (const std::range_error&) 33d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner { 34e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng } 35d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner try 36d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner { 37d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner myconv.from_bytes('\xA5'); 38d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner assert(false); 39d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner } 40d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner catch (const std::range_error&) 415196c12e9fdec9ef3c63d96cb529c1c1cb732773Benjamin Kramer { 425196c12e9fdec9ef3c63d96cb529c1c1cb732773Benjamin Kramer } 435196c12e9fdec9ef3c63d96cb529c1c1cb732773Benjamin Kramer } 445196c12e9fdec9ef3c63d96cb529c1c1cb732773Benjamin Kramer { 455196c12e9fdec9ef3c63d96cb529c1c1cb732773Benjamin Kramer Myconv myconv("byte error"); 465196c12e9fdec9ef3c63d96cb529c1c1cb732773Benjamin Kramer std::string bs = myconv.to_bytes(L"\xDA83"); 475196c12e9fdec9ef3c63d96cb529c1c1cb732773Benjamin Kramer assert(bs == "byte error"); 485196c12e9fdec9ef3c63d96cb529c1c1cb732773Benjamin Kramer try 495196c12e9fdec9ef3c63d96cb529c1c1cb732773Benjamin Kramer { 50d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner myconv.from_bytes('\xA5'); 51d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner assert(false); 52e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng } 53d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner catch (const std::range_error&) 54d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner { 55e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng } 56d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner } 570ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach { 58cb778a8634454c70d88955b3732f330a6cbe5b07Chris Lattner Myconv myconv("byte error", L"wide error"); 59cb778a8634454c70d88955b3732f330a6cbe5b07Chris Lattner std::string bs = myconv.to_bytes(L"\xDA83"); 60cb778a8634454c70d88955b3732f330a6cbe5b07Chris Lattner assert(bs == "byte error"); 61a606d955de3b0f777131d74162eb6f11b5f95d75Dan Gohman std::wstring ws = myconv.from_bytes('\xA5'); 620ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach assert(ws == L"wide error"); 63e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng } 64d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner} 650ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach