This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
[v3] libstdc++/16251
- From: Paolo Carlini <pcarlini at suse dot de>
- To: Gcc Patch List <gcc-patches at gcc dot gnu dot org>
- Cc: libstdc++ <libstdc++ at gcc dot gnu dot org>
- Date: Sun, 10 Feb 2008 16:49:07 +0100
- Subject: [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>