This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[v3] libstdc++/16251


Hi,

tested x86_64-linux, committed to mainline.

Paolo.

//////////////////////
2008-02-10  Paolo Carlini  <pcarlini@suse.de>

	PR libstdc++/16251
	* include/std/istream (basic_istream<>::basic_istream()): Call
	this->init().
	(basic_iostream<>::basic_iostream(basic_streambuf<>*)): Don't
	do it here, per 27.6.1.5.1/1.
	* include/std/ostream (basic_ostream<>::basic_ostream()): Call
	this->init().
	* testsuite/27_io/basic_iostream/cons/16251.C: New.

	* testsuite/27_io/basic_iostream/cons/2020.cc: Minor tweaks.
Index: include/std/istream
===================================================================
--- include/std/istream	(revision 132212)
+++ include/std/istream	(working copy)
@@ -1,7 +1,7 @@
 // Input streams -*- C++ -*-
 
 // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007
+// 2006, 2007, 2008
 // Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
@@ -91,8 +91,9 @@
        *  derived classes' initialization lists, which pass a pointer to
        *  their own stream buffer.
       */
-      explicit 
-      basic_istream(__streambuf_type* __sb): _M_gcount(streamsize(0))
+      explicit
+      basic_istream(__streambuf_type* __sb)
+      : _M_gcount(streamsize(0))
       { this->init(__sb); }
 
       /**
@@ -581,8 +582,9 @@
       //@}
 
     protected:
-      explicit 
-      basic_istream(): _M_gcount(streamsize(0)) { }
+      basic_istream()
+      : _M_gcount(streamsize(0))
+      { this->init(0); }
 
       template<typename _ValueT>
         __istream_type&
@@ -665,7 +667,7 @@
        *  If the stream state is still good, then the sentry state becomes
        *  true ("okay").
       */
-      explicit 
+      explicit
       sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false);
 
       /**
@@ -788,10 +790,9 @@
        *  Both of the parent classes are initialized with the same
        *  streambuf pointer passed to this constructor.
       */
-      explicit 
+      explicit
       basic_iostream(basic_streambuf<_CharT, _Traits>* __sb)
-      : __istream_type(), __ostream_type()
-      { this->init(__sb); }
+      : __istream_type(__sb), __ostream_type(__sb) { }
 
       /**
        *  @brief  Destructor does nothing.
@@ -800,9 +801,8 @@
       ~basic_iostream() { }
 
     protected:
-      explicit 
-      basic_iostream() : __istream_type(), __ostream_type()
-      { }
+      basic_iostream()
+      : __istream_type(), __ostream_type() { }
     };
 
   // [27.6.1.4] standard basic_istream manipulators
Index: include/std/ostream
===================================================================
--- include/std/ostream	(revision 132212)
+++ include/std/ostream	(working copy)
@@ -1,7 +1,7 @@
 // Output streams -*- C++ -*-
 
 // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007
+// 2006, 2007, 2008
 // Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
@@ -366,8 +366,8 @@
       seekp(off_type, ios_base::seekdir);
       
     protected:
-      explicit 
-      basic_ostream() { }
+      basic_ostream()
+      { this->init(0); }
 
       template<typename _ValueT>
         __ostream_type&
Index: testsuite/27_io/basic_iostream/cons/16251.C
===================================================================
--- testsuite/27_io/basic_iostream/cons/16251.C	(revision 0)
+++ testsuite/27_io/basic_iostream/cons/16251.C	(revision 0)
@@ -0,0 +1,42 @@
+// Copyright (C) 2008 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 27.6.1.5 - Template class basic_iostream 
+
+#include <iostream>
+
+class mystream
+: public std::iostream
+{
+public:
+  mystream () { };
+};
+
+// libstdc++/16251
+void test01()
+{
+  mystream x;
+  x.rdbuf(std::cout.rdbuf());
+  x << std::endl;
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
Index: testsuite/27_io/basic_iostream/cons/2020.cc
===================================================================
--- testsuite/27_io/basic_iostream/cons/2020.cc	(revision 132212)
+++ testsuite/27_io/basic_iostream/cons/2020.cc	(working copy)
@@ -1,6 +1,7 @@
 // 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
 
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2006, 2007, 2008
 // Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
@@ -19,8 +20,7 @@
 // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
 // USA.
 
-// 27.8.1.1 - Template class basic_filebuf 
-// NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
+// 27.6.1.5 - Template class basic_iostream 
 
 #include <iostream>
 #include <testsuite_hooks.h>

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]