char16_t_unshift.pass.cpp revision f5256e16dfc425c1d466f6308d4026d529ce9e0b
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch//                     The LLVM Compiler Infrastructure
4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch//
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// This file is distributed under the University of Illinois Open Source
6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// License. See LICENSE.TXT for details.
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch//
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// <locale>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// template <> class codecvt<char16_t, char, mbstate_t>
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// result unshift(stateT& state,
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                externT* to, externT* to_end, externT*& to_next) const;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <locale>
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cassert>
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::codecvt<char16_t, char, std::mbstate_t> F;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int main()
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::locale l = std::locale::classic();
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::vector<char> to(3);
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const F& f = std::use_facet<F>(l);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::mbstate_t mbs;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    char* to_next = 0;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    assert(f.unshift(mbs, to.data(), to.data() + to.size(), to_next) == F::noconv);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    assert(to_next == to.data());
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)