1 // 2001-05-21 Benjamin Kosnik <bkoz@redhat.com> 2 3 // Copyright (C) 2001-2016 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.7.1.3 Overridden virtual functions 21 22 #include <sstream> 23 #include <testsuite_hooks.h> 24 25 bool over_called; 26 27 class Derived_stringbuf : public std::wstringbuf 28 { 29 public: overflow(int_type c)30 int_type overflow(int_type c) 31 { 32 over_called = true; 33 return std::wstringbuf::overflow(c); 34 } 35 pub_epptr() const36 const char_type* pub_epptr() const 37 { 38 return epptr(); 39 } 40 pub_pptr() const41 const char_type* pub_pptr() const 42 { 43 return pptr(); 44 } 45 }; 46 47 // libstdc++/9404 test04()48void test04() 49 { 50 bool test __attribute__((unused)) = true; 51 52 bool over_expected; 53 54 // sputc 55 Derived_stringbuf dsbuf_01; 56 over_called = false; 57 dsbuf_01.sputc(L'i'); 58 VERIFY( over_called ); 59 over_expected = dsbuf_01.pub_epptr() == dsbuf_01.pub_pptr(); 60 over_called = false; 61 dsbuf_01.sputc(L'v'); 62 VERIFY( (!over_expected && !over_called) 63 || (over_expected && over_called) ); 64 dsbuf_01.sputc(L'i'); 65 VERIFY( dsbuf_01.str() == L"ivi" ); // Sanity check. 66 } 67 main()68int main() 69 { 70 test04(); 71 return 0; 72 } 73