1// 2004-02-14  Petur Runolfsson  <peturr02@ru.is>
2
3// Copyright (C) 2004-2015 Free Software Foundation, Inc.
4//
5// This file is part of the GNU ISO C++ Library.  This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
8// Free Software Foundation; either version 3, or (at your option)
9// any later version.
10
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14// GNU General Public License for more details.
15
16// You should have received a copy of the GNU General Public License along
17// with this library; see the file COPYING3.  If not see
18// <http://www.gnu.org/licenses/>.
19
20// 27.8.1.4 Overridden virtual functions
21
22#include <fstream>
23#include <locale>
24
25class Cvt : public std::codecvt<char, char, std::mbstate_t>
26{
27protected:
28  virtual std::codecvt_base::result
29  do_out(std::mbstate_t&, const char* from, const char*,
30	 const char*& from_next, char* to, char*, char*& to_next) const
31  {
32    from_next = from;
33    to_next = to;
34    return std::codecvt_base::error;
35  }
36
37  virtual bool
38  do_always_noconv() const throw()
39  { return false; }
40};
41
42// libstdc++/13858
43void test01()
44{
45  using namespace std;
46
47  filebuf fb;
48  fb.pubimbue(locale(locale::classic(), new Cvt));
49  fb.open("tmp_13858_char", ios_base::out);
50
51  try
52    {
53      fb.sputc('a');
54      fb.sputc('b');
55      fb.pubimbue(locale::classic());
56      fb.sputc('c');
57      fb.pubsync();
58      fb.close();
59    }
60  catch (std::exception&)
61    {
62    }
63}
64
65int main()
66{
67  test01();
68  return 0;
69}
70