1// Copyright (C) 2005 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 2, 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 COPYING. If not, write to the Free 16// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 17// USA. 18 19// 27.6.2.6 Unformatted output functions 20// 21// _GLIBCXX_RESOLVE_LIB_DEFECTS 22// DR 60. What is a formatted input function? 23// basic_ostream::write(const char_type*, streamsize) is an unformatted 24// 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::wstreambuf 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::wostream os(&buf); 47 48 VERIFY( os.good() ); 49 50 os.write(L"a", 1); 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.write(L"b", 1); 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