1// 2003-09-22 Petur Runolfsson <peturr02@ru.is> 2 3// Copyright (C) 2003, 2005, 2009 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.6.2.6 Unformatted output functions 21// 22// _GLIBCXX_RESOLVE_LIB_DEFECTS 23// DR 60. What is a formatted input function? 24// basic_ostream::put(char_type) is an unformatted output function. 25// DR 63. Exception-handling policy for unformatted output. 26// Unformatted output functions should catch exceptions thrown 27// from streambuf members. 28 29#include <ostream> 30#include <streambuf> 31#include <testsuite_hooks.h> 32 33class Buf : public std::streambuf 34{ 35protected: 36 virtual int_type 37 overflow(int_type = traits_type::eof()) 38 { throw 0; } 39}; 40 41void test01() 42{ 43 bool test __attribute__((unused)) = true; 44 45 Buf buf; 46 std::ostream os(&buf); 47 48 VERIFY( os.good() ); 49 50 os.put('a'); 51 52 VERIFY( os.rdstate() == std::ios_base::badbit ); 53 54 os.clear(); 55 os.exceptions(std::ios_base::badbit); 56 57 try 58 { 59 os.put('b'); 60 VERIFY( false ); 61 } 62 catch (int) 63 { 64 VERIFY( os.rdstate() == std::ios_base::badbit ); 65 } 66} 67 68int main() 69{ 70 test01(); 71 return 0; 72} 73