187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant//===----------------------------------------------------------------------===// 287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant// 387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant// The LLVM Compiler Infrastructure 487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant// 887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant//===----------------------------------------------------------------------===// 987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 1087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant// <codecvt> 1187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 1287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant// template <class Elem, unsigned long Maxcode = 0x10ffff, 1387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant// codecvt_mode Mode = (codecvt_mode)0> 1487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant// class codecvt_utf16 1587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant// : public codecvt<Elem, char, mbstate_t> 1687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant// { 1787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant// // unspecified 1887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant// }; 1987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 2087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant// result 2187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant// in(stateT& state, 2287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant// const externT* from, const externT* from_end, const externT*& from_next, 2387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant// internT* to, internT* to_end, internT*& to_next) const; 2487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 2587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant#include <codecvt> 2687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant#include <cassert> 2787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 2887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnantint main() 2987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant{ 3087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant { 3187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant typedef std::codecvt_utf16<wchar_t> C; 3287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant C c; 3387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant wchar_t w = 0; 34ef0036c5aa3c3e78ee97af78caa649d657a6372cHoward Hinnant char n[4] = {char(0xD8), char(0xC0), char(0xDC), char(0x03)}; 3587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant wchar_t* wp = nullptr; 3687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::mbstate_t m; 3787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant const char* np = nullptr; 3887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::codecvt_base::result r = c.in(m, n, n+4, np, &w, &w+1, wp); 3987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 4087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 4187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+4); 4287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x40003); 4387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 4487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x10); 4587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x05); 4687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 4787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 4887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 4987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 5087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x1005); 5187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 5287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x04); 5387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x53); 5487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 5587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 5687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 5787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 5887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x453); 5987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 6087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant w = 0x56; 6187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x00); 6287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x56); 6387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 6487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 6587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 6687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 6787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x56); 6887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant } 6987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant { 7087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant typedef std::codecvt_utf16<wchar_t, 0x1000> C; 7187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant C c; 7287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant wchar_t w = 0; 73ef0036c5aa3c3e78ee97af78caa649d657a6372cHoward Hinnant char n[4] = {char(0xD8), char(0xC0), char(0xDC), char(0x03)}; 7487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant wchar_t* wp = nullptr; 7587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::mbstate_t m; 7687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant const char* np = nullptr; 7787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::codecvt_base::result r = c.in(m, n, n+4, np, &w, &w+1, wp); 7887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::error); 7987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w); 8087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n); 8187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0); 8287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 8387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x10); 8487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x05); 8587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 8687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::error); 8787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w); 8887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n); 8987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0); 9087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 9187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x04); 9287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x53); 9387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 9487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 9587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 9687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 9787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x453); 9887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 9987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant w = 0x56; 10087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x00); 10187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x56); 10287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 10387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 10487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 10587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 10687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x56); 10787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant } 10887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant { 10987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant typedef std::codecvt_utf16<wchar_t, 0x10ffff, std::consume_header> C; 11087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant C c; 11187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant wchar_t w = 0; 112ef0036c5aa3c3e78ee97af78caa649d657a6372cHoward Hinnant char n[6] = {char(0xFE), char(0xFF), char(0xD8), char(0xC0), char(0xDC), char(0x03)}; 11387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant wchar_t* wp = nullptr; 11487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::mbstate_t m; 11587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant const char* np = nullptr; 11687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::codecvt_base::result r = c.in(m, n, n+6, np, &w, &w+1, wp); 11787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 11887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 11987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+6); 12087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x40003); 12187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 12287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x10); 12387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x05); 12487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 12587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 12687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 12787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 12887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x1005); 12987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 13087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x04); 13187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x53); 13287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 13387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 13487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 13587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 13687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x453); 13787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 13887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant w = 0x56; 13987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x00); 14087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x56); 14187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 14287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 14387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 14487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 14587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x56); 14687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant } 14787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant { 14887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant typedef std::codecvt_utf16<wchar_t, 0x10ffff, std::little_endian> C; 14987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant C c; 15087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant wchar_t w = 0; 151ef0036c5aa3c3e78ee97af78caa649d657a6372cHoward Hinnant char n[4] = {char(0xC0), char(0xD8), char(0x03), char(0xDC)}; 15287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant wchar_t* wp = nullptr; 15387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::mbstate_t m; 15487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant const char* np = nullptr; 15587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::codecvt_base::result r = c.in(m, n, n+4, np, &w, &w+1, wp); 15687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 15787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 15887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+4); 15987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x40003); 16087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 16187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x10); 16287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x05); 16387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 16487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 16587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 16687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 16787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x1005); 16887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 16987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x04); 17087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x53); 17187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 17287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 17387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 17487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 17587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x453); 17687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 17787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant w = 0x56; 17887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x00); 17987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x56); 18087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 18187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 18287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 18387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 18487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x56); 18587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant } 18687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant { 18787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant typedef std::codecvt_utf16<wchar_t, 0x1000, std::little_endian> C; 18887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant C c; 18987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant wchar_t w = 0; 190ef0036c5aa3c3e78ee97af78caa649d657a6372cHoward Hinnant char n[4] = {char(0xC0), char(0xD8), char(0x03), char(0xDC)}; 19187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant wchar_t* wp = nullptr; 19287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::mbstate_t m; 19387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant const char* np = nullptr; 19487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::codecvt_base::result r = c.in(m, n, n+4, np, &w, &w+1, wp); 19587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::error); 19687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w); 19787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n); 19887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0); 19987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 20087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x10); 20187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x05); 20287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 20387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::error); 20487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w); 20587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n); 20687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0); 20787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 20887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x04); 20987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x53); 21087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 21187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 21287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 21387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 21487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x453); 21587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 21687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant w = 0x56; 21787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x00); 21887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x56); 21987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 22087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 22187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 22287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 22387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x56); 22487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant } 22587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant { 22687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant typedef std::codecvt_utf16<wchar_t, 0x10ffff, std::codecvt_mode( 22787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::consume_header | 22887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::little_endian)> C; 22987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant C c; 23087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant wchar_t w = 0; 231ef0036c5aa3c3e78ee97af78caa649d657a6372cHoward Hinnant char n[6] = {char(0xFF), char(0xFE), char(0xC0), char(0xD8), char(0x03), char(0xDC)}; 23287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant wchar_t* wp = nullptr; 23387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::mbstate_t m; 23487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant const char* np = nullptr; 23587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::codecvt_base::result r = c.in(m, n, n+6, np, &w, &w+1, wp); 23687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 23787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 23887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+6); 23987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x40003); 24087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 24187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x10); 24287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x05); 24387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 24487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 24587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 24687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 24787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x1005); 24887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 24987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x04); 25087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x53); 25187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 25287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 25387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 25487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 25587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x453); 25687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 25787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant w = 0x56; 25887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x00); 25987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x56); 26087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 26187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 26287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 26387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 26487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x56); 26587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant } 26687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant { 26787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant typedef std::codecvt_utf16<char32_t> C; 26887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant C c; 26987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char32_t w = 0; 270ef0036c5aa3c3e78ee97af78caa649d657a6372cHoward Hinnant char n[4] = {char(0xD8), char(0xC0), char(0xDC), char(0x03)}; 27187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char32_t* wp = nullptr; 27287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::mbstate_t m; 27387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant const char* np = nullptr; 27487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::codecvt_base::result r = c.in(m, n, n+4, np, &w, &w+1, wp); 27587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 27687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 27787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+4); 27887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x40003); 27987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 28087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x10); 28187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x05); 28287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 28387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 28487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 28587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 28687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x1005); 28787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 28887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x04); 28987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x53); 29087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 29187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 29287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 29387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 29487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x453); 29587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 29687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant w = 0x56; 29787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x00); 29887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x56); 29987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 30087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 30187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 30287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 30387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x56); 30487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant } 30587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant { 30687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant typedef std::codecvt_utf16<char32_t, 0x1000> C; 30787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant C c; 30887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char32_t w = 0; 309ef0036c5aa3c3e78ee97af78caa649d657a6372cHoward Hinnant char n[4] = {char(0xD8), char(0xC0), char(0xDC), char(0x03)}; 31087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char32_t* wp = nullptr; 31187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::mbstate_t m; 31287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant const char* np = nullptr; 31387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::codecvt_base::result r = c.in(m, n, n+4, np, &w, &w+1, wp); 31487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::error); 31587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w); 31687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n); 31787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0); 31887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 31987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x10); 32087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x05); 32187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 32287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::error); 32387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w); 32487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n); 32587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0); 32687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 32787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x04); 32887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x53); 32987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 33087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 33187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 33287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 33387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x453); 33487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 33587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant w = 0x56; 33687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x00); 33787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x56); 33887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 33987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 34087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 34187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 34287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x56); 34387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant } 34487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant { 34587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant typedef std::codecvt_utf16<char32_t, 0x10ffff, std::consume_header> C; 34687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant C c; 34787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char32_t w = 0; 348ef0036c5aa3c3e78ee97af78caa649d657a6372cHoward Hinnant char n[6] = {char(0xFE), char(0xFF), char(0xD8), char(0xC0), char(0xDC), char(0x03)}; 34987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char32_t* wp = nullptr; 35087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::mbstate_t m; 35187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant const char* np = nullptr; 35287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::codecvt_base::result r = c.in(m, n, n+6, np, &w, &w+1, wp); 35387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 35487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 35587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+6); 35687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x40003); 35787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 35887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x10); 35987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x05); 36087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 36187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 36287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 36387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 36487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x1005); 36587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 36687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x04); 36787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x53); 36887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 36987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 37087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 37187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 37287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x453); 37387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 37487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant w = 0x56; 37587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x00); 37687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x56); 37787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 37887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 37987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 38087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 38187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x56); 38287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant } 38387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant { 38487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant typedef std::codecvt_utf16<char32_t, 0x10ffff, std::little_endian> C; 38587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant C c; 38687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char32_t w = 0; 387ef0036c5aa3c3e78ee97af78caa649d657a6372cHoward Hinnant char n[4] = {char(0xC0), char(0xD8), char(0x03), char(0xDC)}; 38887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char32_t* wp = nullptr; 38987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::mbstate_t m; 39087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant const char* np = nullptr; 39187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::codecvt_base::result r = c.in(m, n, n+4, np, &w, &w+1, wp); 39287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 39387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 39487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+4); 39587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x40003); 39687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 39787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x10); 39887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x05); 39987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 40087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 40187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 40287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 40387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x1005); 40487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 40587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x04); 40687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x53); 40787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 40887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 40987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 41087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 41187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x453); 41287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 41387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant w = 0x56; 41487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x00); 41587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x56); 41687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 41787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 41887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 41987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 42087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x56); 42187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant } 42287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant { 42387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant typedef std::codecvt_utf16<char32_t, 0x1000, std::little_endian> C; 42487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant C c; 42587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char32_t w = 0; 426ef0036c5aa3c3e78ee97af78caa649d657a6372cHoward Hinnant char n[4] = {char(0xC0), char(0xD8), char(0x03), char(0xDC)}; 42787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char32_t* wp = nullptr; 42887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::mbstate_t m; 42987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant const char* np = nullptr; 43087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::codecvt_base::result r = c.in(m, n, n+4, np, &w, &w+1, wp); 43187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::error); 43287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w); 43387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n); 43487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0); 43587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 43687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x10); 43787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x05); 43887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 43987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::error); 44087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w); 44187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n); 44287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0); 44387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 44487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x04); 44587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x53); 44687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 44787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 44887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 44987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 45087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x453); 45187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 45287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant w = 0x56; 45387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x00); 45487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x56); 45587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 45687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 45787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 45887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 45987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x56); 46087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant } 46187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant { 46287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant typedef std::codecvt_utf16<char32_t, 0x10ffff, std::codecvt_mode( 46387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::consume_header | 46487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::little_endian)> C; 46587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant C c; 46687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char32_t w = 0; 467ef0036c5aa3c3e78ee97af78caa649d657a6372cHoward Hinnant char n[6] = {char(0xFF), char(0xFE), char(0xC0), char(0xD8), char(0x03), char(0xDC)}; 46887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char32_t* wp = nullptr; 46987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::mbstate_t m; 47087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant const char* np = nullptr; 47187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::codecvt_base::result r = c.in(m, n, n+6, np, &w, &w+1, wp); 47287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 47387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 47487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+6); 47587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x40003); 47687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 47787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x10); 47887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x05); 47987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 48087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 48187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 48287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 48387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x1005); 48487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 48587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x04); 48687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x53); 48787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 48887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 48987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 49087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 49187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x453); 49287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 49387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant w = 0x56; 49487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x00); 49587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x56); 49687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 49787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 49887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 49987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 50087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x56); 50187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant } 50287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 50387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant { 50487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant typedef std::codecvt_utf16<char16_t> C; 50587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant C c; 50687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char16_t w = 0; 507ef0036c5aa3c3e78ee97af78caa649d657a6372cHoward Hinnant char n[4] = {char(0xD8), char(0xC0), char(0xDC), char(0x03)}; 50887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char16_t* wp = nullptr; 50987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::mbstate_t m; 51087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant const char* np = nullptr; 51187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::codecvt_base::result r = c.in(m, n, n+4, np, &w, &w+1, wp); 51287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::error); 51387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w); 51487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n); 51587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0); 51687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 51787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x10); 51887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x05); 51987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 52087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 52187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 52287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 52387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x1005); 52487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 52587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x04); 52687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x53); 52787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 52887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 52987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 53087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 53187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x453); 53287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 53387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant w = 0x56; 53487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x00); 53587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x56); 53687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 53787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 53887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 53987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 54087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x56); 54187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant } 54287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant { 54387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant typedef std::codecvt_utf16<char16_t, 0x1000> C; 54487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant C c; 54587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char16_t w = 0; 546ef0036c5aa3c3e78ee97af78caa649d657a6372cHoward Hinnant char n[4] = {char(0xD8), char(0xC0), char(0xDC), char(0x03)}; 54787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char16_t* wp = nullptr; 54887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::mbstate_t m; 54987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant const char* np = nullptr; 55087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::codecvt_base::result r = c.in(m, n, n+4, np, &w, &w+1, wp); 55187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::error); 55287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w); 55387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n); 55487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0); 55587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 55687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x10); 55787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x05); 55887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 55987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::error); 56087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w); 56187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n); 56287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0); 56387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 56487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x04); 56587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x53); 56687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 56787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 56887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 56987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 57087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x453); 57187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 57287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant w = 0x56; 57387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x00); 57487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x56); 57587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 57687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 57787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 57887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 57987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x56); 58087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant } 58187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant { 58287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant typedef std::codecvt_utf16<char16_t, 0x10ffff, std::consume_header> C; 58387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant C c; 58487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char16_t w = 0; 585ef0036c5aa3c3e78ee97af78caa649d657a6372cHoward Hinnant char n[6] = {char(0xFE), char(0xFF), char(0xD8), char(0xC0), char(0xDC), char(0x03)}; 58687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char16_t* wp = nullptr; 58787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::mbstate_t m; 58887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant const char* np = nullptr; 58987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::codecvt_base::result r = c.in(m, n, n+6, np, &w, &w+1, wp); 59087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::error); 59187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w); 59287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 59387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0); 59487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 59587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x10); 59687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x05); 59787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 59887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 59987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 60087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 60187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x1005); 60287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 60387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x04); 60487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x53); 60587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 60687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 60787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 60887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 60987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x453); 61087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 61187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant w = 0x56; 61287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x00); 61387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x56); 61487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 61587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 61687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 61787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 61887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x56); 61987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant } 62087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant { 62187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant typedef std::codecvt_utf16<char16_t, 0x10ffff, std::little_endian> C; 62287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant C c; 62387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char16_t w = 0; 624ef0036c5aa3c3e78ee97af78caa649d657a6372cHoward Hinnant char n[4] = {char(0xC0), char(0xD8), char(0x03), char(0xDC)}; 62587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char16_t* wp = nullptr; 62687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::mbstate_t m; 62787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant const char* np = nullptr; 62887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::codecvt_base::result r = c.in(m, n, n+4, np, &w, &w+1, wp); 62987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::error); 63087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w); 63187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n); 63287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0); 63387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 63487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x10); 63587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x05); 63687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 63787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 63887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 63987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 64087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x1005); 64187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 64287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x04); 64387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x53); 64487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 64587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 64687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 64787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 64887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x453); 64987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 65087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant w = 0x56; 65187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x00); 65287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x56); 65387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 65487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 65587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 65687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 65787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x56); 65887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant } 65987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant { 66087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant typedef std::codecvt_utf16<char16_t, 0x1000, std::little_endian> C; 66187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant C c; 66287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char16_t w = 0; 663ef0036c5aa3c3e78ee97af78caa649d657a6372cHoward Hinnant char n[4] = {char(0xC0), char(0xD8), char(0x03), char(0xDC)}; 66487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char16_t* wp = nullptr; 66587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::mbstate_t m; 66687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant const char* np = nullptr; 66787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::codecvt_base::result r = c.in(m, n, n+4, np, &w, &w+1, wp); 66887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::error); 66987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w); 67087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n); 67187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0); 67287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 67387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x10); 67487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x05); 67587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 67687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::error); 67787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w); 67887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n); 67987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0); 68087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 68187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x04); 68287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x53); 68387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 68487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 68587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 68687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 68787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x453); 68887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 68987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant w = 0x56; 69087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x00); 69187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x56); 69287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 69387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 69487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 69587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 69687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x56); 69787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant } 69887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant { 69987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant typedef std::codecvt_utf16<char16_t, 0x10ffff, std::codecvt_mode( 70087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::consume_header | 70187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::little_endian)> C; 70287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant C c; 70387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char16_t w = 0; 704ef0036c5aa3c3e78ee97af78caa649d657a6372cHoward Hinnant char n[6] = {char(0xFF), char(0xFE), char(0xC0), char(0xD8), char(0x03), char(0xDC)}; 70587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant char16_t* wp = nullptr; 70687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::mbstate_t m; 70787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant const char* np = nullptr; 70887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant std::codecvt_base::result r = c.in(m, n, n+6, np, &w, &w+1, wp); 70987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::error); 71087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w); 71187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 71287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0); 71387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 71487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x10); 71587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x05); 71687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 71787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 71887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 71987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 72087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x1005); 72187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 72287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x04); 72387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x53); 72487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 72587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 72687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 72787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 72887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x453); 72987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 73087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant w = 0x56; 73187d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[1] = char(0x00); 73287d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant n[0] = char(0x56); 73387d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant r = c.in(m, n, n+2, np, &w, &w+1, wp); 73487d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(r == std::codecvt_base::ok); 73587d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(wp == &w+1); 73687d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(np == n+2); 73787d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant assert(w == 0x56); 73887d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant } 73987d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant} 740