1 // 2001-05-21 Benjamin Kosnik <bkoz@redhat.com> 2 3 // Copyright (C) 2001-2020 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 over_expected; 51 52 // sputc 53 Derived_stringbuf dsbuf_01; 54 over_called = false; 55 dsbuf_01.sputc(L'i'); 56 VERIFY( over_called ); 57 over_expected = dsbuf_01.pub_epptr() == dsbuf_01.pub_pptr(); 58 over_called = false; 59 dsbuf_01.sputc(L'v'); 60 VERIFY( (!over_expected && !over_called) 61 || (over_expected && over_called) ); 62 dsbuf_01.sputc(L'i'); 63 VERIFY( dsbuf_01.str() == L"ivi" ); // Sanity check. 64 } 65 main()66int main() 67 { 68 test04(); 69 return 0; 70 } 71