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