1b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===// 2b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 3b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// The LLVM Compiler Infrastructure 4b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 5b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// This file is dual licensed under the MIT and the University of Illinois Open 6b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// Source Licenses. See LICENSE.TXT for details. 7b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 8b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===// 9b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 10b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// <codecvt> 11b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 12b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// template <class Elem, unsigned long Maxcode = 0x10ffff, 13b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// codecvt_mode Mode = (codecvt_mode)0> 14b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// class codecvt_utf8 15b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// : public codecvt<Elem, char, mbstate_t> 16b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// { 17b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// // unspecified 18b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// }; 19b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 20b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// result 21b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// in(stateT& state, 22b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// const externT* from, const externT* from_end, const externT*& from_next, 23b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// internT* to, internT* to_end, internT*& to_next) const; 24b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 25b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <codecvt> 26b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <cassert> 27b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 28b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerint main() 29b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{ 30b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 31b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef std::codecvt_utf8<wchar_t> C; 32b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner C c; 33b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner wchar_t w = 0; 34b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char n[4] = {char(0xF1), char(0x80), char(0x80), char(0x83)}; 35b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner wchar_t* wp = nullptr; 36b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::mbstate_t m; 37b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner const char* np = nullptr; 38b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::codecvt_base::result r = c.in(m, n, n+4, np, &w, &w+1, wp); 39b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 40b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 41b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+4); 42b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x40003); 43b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 44b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0xE1); 45b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[1] = char(0x80); 46b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[2] = char(0x85); 47b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+3, np, &w, &w+1, wp); 48b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 49b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 50b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+3); 51b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x1005); 52b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 53b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0xD1); 54b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[1] = char(0x93); 55b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+2, np, &w, &w+1, wp); 56b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 57b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 58b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+2); 59b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x453); 60b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 61b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner w = 0x56; 62b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0x56); 63b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+1, np, &w, &w+1, wp); 64b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 65b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 66b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+1); 67b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x56); 68b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 69b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 70b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef std::codecvt_utf8<wchar_t, 0x1000> C; 71b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner C c; 72b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner wchar_t w = 0; 73b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char n[4] = {char(0xF1), char(0x80), char(0x80), char(0x83)}; 74b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner wchar_t* wp = nullptr; 75b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::mbstate_t m; 76b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner const char* np = nullptr; 77b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::codecvt_base::result r = c.in(m, n, n+4, np, &w, &w+1, wp); 78b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::error); 79b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w); 80b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n); 81b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0); 82b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 83b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0xE1); 84b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[1] = char(0x80); 85b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[2] = char(0x85); 86b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+3, np, &w, &w+1, wp); 87b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::error); 88b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w); 89b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n); 90b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0); 91b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 92b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0xD1); 93b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[1] = char(0x93); 94b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+2, np, &w, &w+1, wp); 95b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 96b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 97b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+2); 98b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x453); 99b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 100b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner w = 0x56; 101b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0x56); 102b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+1, np, &w, &w+1, wp); 103b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 104b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 105b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+1); 106b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x56); 107b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 108b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 109b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef std::codecvt_utf8<wchar_t, 0xFFFFFFFF, std::consume_header> C; 110b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner C c; 111b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner wchar_t w = 0; 112b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char n[7] = {char(0xEF), char(0xBB), char(0xBF), char(0xF1), char(0x80), char(0x80), char(0x83)}; 113b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner wchar_t* wp = nullptr; 114b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::mbstate_t m; 115b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner const char* np = nullptr; 116b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::codecvt_base::result r = c.in(m, n, n+7, np, &w, &w+1, wp); 117b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 118b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 119b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+7); 120b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x40003); 121b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 122b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0xE1); 123b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[1] = char(0x80); 124b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[2] = char(0x85); 125b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+3, np, &w, &w+1, wp); 126b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 127b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 128b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+3); 129b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x1005); 130b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 131b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0xEF); 132b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[1] = char(0xBB); 133b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[2] = char(0xBF); 134b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[3] = char(0xD1); 135b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[4] = char(0x93); 136b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+5, np, &w, &w+1, wp); 137b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 138b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 139b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+5); 140b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x453); 141b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 142b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner w = 0x56; 143b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0x56); 144b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+1, np, &w, &w+1, wp); 145b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 146b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 147b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+1); 148b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x56); 149b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 150b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 151b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef std::codecvt_utf8<char32_t> C; 152b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner C c; 153b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char32_t w = 0; 154b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char n[4] = {char(0xF1), char(0x80), char(0x80), char(0x83)}; 155b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char32_t* wp = nullptr; 156b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::mbstate_t m; 157b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner const char* np = nullptr; 158b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::codecvt_base::result r = c.in(m, n, n+4, np, &w, &w+1, wp); 159b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 160b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 161b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+4); 162b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x40003); 163b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 164b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0xE1); 165b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[1] = char(0x80); 166b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[2] = char(0x85); 167b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+3, np, &w, &w+1, wp); 168b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 169b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 170b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+3); 171b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x1005); 172b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 173b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0xD1); 174b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[1] = char(0x93); 175b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+2, np, &w, &w+1, wp); 176b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 177b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 178b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+2); 179b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x453); 180b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 181b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner w = 0x56; 182b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0x56); 183b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+1, np, &w, &w+1, wp); 184b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 185b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 186b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+1); 187b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x56); 188b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 189b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 190b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef std::codecvt_utf8<char32_t, 0x1000> C; 191b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner C c; 192b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char32_t w = 0; 193b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char n[4] = {char(0xF1), char(0x80), char(0x80), char(0x83)}; 194b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char32_t* wp = nullptr; 195b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::mbstate_t m; 196b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner const char* np = nullptr; 197b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::codecvt_base::result r = c.in(m, n, n+4, np, &w, &w+1, wp); 198b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::error); 199b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w); 200b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n); 201b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0); 202b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 203b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0xE1); 204b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[1] = char(0x80); 205b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[2] = char(0x85); 206b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+3, np, &w, &w+1, wp); 207b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::error); 208b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w); 209b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n); 210b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0); 211b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 212b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0xD1); 213b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[1] = char(0x93); 214b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+2, np, &w, &w+1, wp); 215b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 216b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 217b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+2); 218b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x453); 219b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 220b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner w = 0x56; 221b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0x56); 222b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+1, np, &w, &w+1, wp); 223b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 224b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 225b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+1); 226b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x56); 227b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 228b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 229b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef std::codecvt_utf8<char32_t, 0xFFFFFFFF, std::consume_header> C; 230b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner C c; 231b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char32_t w = 0; 232b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char n[7] = {char(0xEF), char(0xBB), char(0xBF), char(0xF1), char(0x80), char(0x80), char(0x83)}; 233b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char32_t* wp = nullptr; 234b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::mbstate_t m; 235b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner const char* np = nullptr; 236b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::codecvt_base::result r = c.in(m, n, n+7, np, &w, &w+1, wp); 237b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 238b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 239b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+7); 240b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x40003); 241b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 242b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0xE1); 243b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[1] = char(0x80); 244b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[2] = char(0x85); 245b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+3, np, &w, &w+1, wp); 246b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 247b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 248b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+3); 249b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x1005); 250b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 251b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0xEF); 252b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[1] = char(0xBB); 253b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[2] = char(0xBF); 254b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[3] = char(0xD1); 255b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[4] = char(0x93); 256b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+5, np, &w, &w+1, wp); 257b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 258b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 259b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+5); 260b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x453); 261b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 262b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner w = 0x56; 263b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0x56); 264b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+1, np, &w, &w+1, wp); 265b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 266b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 267b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+1); 268b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x56); 269b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 270b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 271b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef std::codecvt_utf8<char16_t> C; 272b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner C c; 273b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char16_t w = 0; 274b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char n[3] = {char(0xE1), char(0x80), char(0x85)}; 275b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char16_t* wp = nullptr; 276b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::mbstate_t m; 277b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner const char* np = nullptr; 278b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::codecvt_base::result r = c.in(m, n, n+3, np, &w, &w+1, wp); 279b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 280b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 281b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+3); 282b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x1005); 283b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 284b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0xD1); 285b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[1] = char(0x93); 286b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+2, np, &w, &w+1, wp); 287b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 288b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 289b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+2); 290b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x453); 291b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 292b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner w = 0x56; 293b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0x56); 294b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+1, np, &w, &w+1, wp); 295b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 296b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 297b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+1); 298b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x56); 299b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 300b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 301b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef std::codecvt_utf8<char16_t, 0x1000> C; 302b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner C c; 303b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char16_t w = 0; 304b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char n[3] = {char(0xE1), char(0x80), char(0x85)}; 305b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char16_t* wp = nullptr; 306b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::mbstate_t m; 307b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner const char* np = nullptr; 308b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::codecvt_base::result r = c.in(m, n, n+3, np, &w, &w+1, wp); 309b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::error); 310b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w); 311b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n); 312b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0); 313b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 314b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0xD1); 315b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[1] = char(0x93); 316b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+2, np, &w, &w+1, wp); 317b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 318b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 319b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+2); 320b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x453); 321b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 322b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner w = 0x56; 323b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0x56); 324b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+1, np, &w, &w+1, wp); 325b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 326b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 327b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+1); 328b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x56); 329b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 330b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 331b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner typedef std::codecvt_utf8<char16_t, 0xFFFFFFFF, std::consume_header> C; 332b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner C c; 333b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char16_t w = 0; 334b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char n[6] = {char(0xEF), char(0xBB), char(0xBF), char(0xE1), char(0x80), char(0x85)}; 335b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner char16_t* wp = nullptr; 336b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::mbstate_t m; 337b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner const char* np = nullptr; 338b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::codecvt_base::result r = c.in(m, n, n+6, np, &w, &w+1, wp); 339b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 340b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 341b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+6); 342b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x1005); 343b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 344b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0xD1); 345b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[1] = char(0x93); 346b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+2, np, &w, &w+1, wp); 347b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 348b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 349b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+2); 350b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x453); 351b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 352b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner w = 0x56; 353b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner n[0] = char(0x56); 354b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner r = c.in(m, n, n+1, np, &w, &w+1, wp); 355b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(r == std::codecvt_base::ok); 356b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(wp == &w+1); 357b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(np == n+1); 358b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(w == 0x56); 359b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 360b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner} 361