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