1// Copyright (C) 2005, 2009 Free Software Foundation, Inc.
2//
3// This file is part of the GNU ISO C++ Library.  This library is free
4// software; you can redistribute it and/or modify it under the
5// terms of the GNU General Public License as published by the
6// Free Software Foundation; either version 3, or (at your option)
7// any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12// GNU General Public License for more details.
13
14// You should have received a copy of the GNU General Public License along
15// with this library; see the file COPYING3.  If not see
16// <http://www.gnu.org/licenses/>.
17
18// 27.6.2.6 Unformatted output functions
19//
20// _GLIBCXX_RESOLVE_LIB_DEFECTS
21// DR 60. What is a formatted input function?
22// basic_ostream::put(char_type) is an unformatted output function.
23// DR 63. Exception-handling policy for unformatted output.
24// Unformatted output functions should catch exceptions thrown
25// from streambuf members.
26
27#include <ostream>
28#include <streambuf>
29#include <testsuite_hooks.h>
30
31class Buf : public std::wstreambuf
32{
33protected:
34  virtual int_type
35  overflow(int_type = traits_type::eof())
36  { throw 0; }
37};
38
39void test01()
40{
41  bool test __attribute__((unused)) = true;
42
43  Buf buf;
44  std::wostream os(&buf);
45
46  VERIFY( os.good() );
47
48  os.put(L'a');
49
50  VERIFY( os.rdstate() == std::ios_base::badbit );
51
52  os.clear();
53  os.exceptions(std::ios_base::badbit);
54
55  try
56    {
57      os.put(L'b');
58      VERIFY( false );
59    }
60  catch (int)
61    {
62      VERIFY( os.rdstate() == std::ios_base::badbit );
63    }
64}
65
66int main()
67{
68  test01();
69  return 0;
70}
71