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