2018-07-06 Jonathan Wakely <jwakely@redhat.com>
+ P0935R0 Eradicating unnecessarily explicit default constructors
+ * config/abi/pre/gnu.ver: Tighten existing patterns and export new
+ default constructor symbols.
+ * include/std/sstream (basic_stringbuf, basic_istringstream)
+ (basic_ostringstream, basic_stringstream): Remove default arguments
+ from explicit constructors taking ios_base::openmode and add separate
+ non-explicit default constructors.
+ * testsuite/27_io/basic_istringstream/cons/default.cc: New.
+ * testsuite/27_io/basic_ostringstream/cons/default.cc: New.
+ * testsuite/27_io/basic_stringstream/cons/default.cc: New.
+ * testsuite/27_io/basic_stringbuf/cons/char/default.cc: New.
+ * testsuite/27_io/basic_stringbuf/cons/wchar_t/default.cc: New.
+
* include/std/variant (__accepted_index): Use void_t.
2018-07-05 Jonathan Wakely <jwakely@redhat.com>
_ZStplI[cw]St11char_traitsI[cw]ESaI[cw]EENSt7__cxx1112basic_stringIT_T0_T1_EE*;
# ABI-tagged stringstreams
- _ZNSt7__cxx1115basic_stringbuf*;
- _ZNSt7__cxx1118basic_stringstream*;
- _ZNSt7__cxx1119basic_istringstream*;
- _ZNSt7__cxx1119basic_ostringstream*;
+# _ZNSt7__cxx1115basic_stringbufI[cw]St11char_traitsI[cw]*;
+ _ZNSt7__cxx1115basic_stringbufI[cw]St11char_traitsI[cw]ESaI[cw]EEC[12]E[ORS]*;
+ _ZNSt7__cxx1115basic_stringbufI[cw]St11char_traitsI[cw]ESaI[cw]EED[012]Ev;
+ _ZNSt7__cxx1115basic_stringbufI[cw]St11char_traitsI[cw]*__xfer_bufptrs*;
+ _ZNSt7__cxx1115basic_stringbufI[cw]St11char_traitsI[cw]ESaI[cw]EE[a1346789]*;
+# _ZNSt7__cxx1118basic_stringstreamI[cw]St11char_traitsI[cw]*;
+ _ZNSt7__cxx1118basic_stringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EEC[12]E[ORS]*;
+ _ZNSt7__cxx1118basic_stringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EED[012]Ev;
+ _ZNSt7__cxx1118basic_stringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EE[a34]*;
+# _ZNSt7__cxx1119basic_istringstreamI[cw]St11char_traitsI[cw]*;
+# _ZNSt7__cxx1119basic_ostringstreamI[cw]St11char_traitsI[cw]*;
+ _ZNSt7__cxx1119basic_[io]stringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EEC[12]E[ORS]*;
+ _ZNSt7__cxx1119basic_[io]stringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EED[012]Ev;
+ _ZNSt7__cxx1119basic_[io]stringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EE[a34]*;
_ZNKSt7__cxx1115basic_stringbuf*;
_ZNKSt7__cxx1118basic_stringstream*;
_ZNKSt7__cxx1119basic_istringstream*;
_ZNSt13runtime_errorC[12]EOS_;
_ZNSt13runtime_erroraSEOS_;
+ # Default constructors for stringstreams
+ _ZNSt15basic_stringbuf[cw]St11char_traitsI[cw]ESaI[cw]EEC[12]Ev;
+ _ZNSt18basic_stringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EEC[12]Ev;
+ _ZNSt19basic_[io]stringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EEC[12]Ev;
+ _ZNSt7__cxx1115basic_stringbuf[cw]St11char_traitsI[cw]ESaI[cw]EEC[12]Ev;
+ _ZNSt7__cxx1118basic_stringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EEC[12]Ev;
+ _ZNSt7__cxx1119basic_[io]stringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EEC[12]Ev;
+
} GLIBCXX_3.4.25;
# Symbols in the support library (libsupc++) have their own tag.
public:
// Constructors:
+
+ /**
+ * @brief Starts with an empty string buffer.
+ *
+ * The default constructor initializes the parent class using its
+ * own default ctor.
+ */
+ basic_stringbuf()
+ : __streambuf_type(), _M_mode(ios_base::in | ios_base::out), _M_string()
+ { }
+
/**
* @brief Starts with an empty string buffer.
* @param __mode Whether the buffer can read, or write, or both.
* own default ctor.
*/
explicit
- basic_stringbuf(ios_base::openmode __mode = ios_base::in | ios_base::out)
+ basic_stringbuf(ios_base::openmode __mode)
: __streambuf_type(), _M_mode(__mode), _M_string()
{ }
public:
// Constructors:
+
/**
* @brief Default constructor starts with an empty string buffer.
+ *
+ * Initializes @c sb using @c in, and passes @c &sb to the base
+ * class initializer. Does not allocate any buffer.
+ *
+ * That's a lie. We initialize the base class with NULL, because the
+ * string class does its own memory management.
+ */
+ basic_istringstream()
+ : __istream_type(), _M_stringbuf(ios_base::in)
+ { this->init(&_M_stringbuf); }
+
+ /**
+ * @brief Starts with an empty string buffer.
* @param __mode Whether the buffer can read, or write, or both.
*
* @c ios_base::in is automatically included in @a __mode.
* string class does its own memory management.
*/
explicit
- basic_istringstream(ios_base::openmode __mode = ios_base::in)
+ basic_istringstream(ios_base::openmode __mode)
: __istream_type(), _M_stringbuf(__mode | ios_base::in)
{ this->init(&_M_stringbuf); }
public:
// Constructors/destructor:
+
/**
* @brief Default constructor starts with an empty string buffer.
+ *
+ * Initializes @c sb using @c mode|out, and passes @c &sb to the base
+ * class initializer. Does not allocate any buffer.
+ *
+ * That's a lie. We initialize the base class with NULL, because the
+ * string class does its own memory management.
+ */
+ basic_ostringstream()
+ : __ostream_type(), _M_stringbuf(ios_base::out)
+ { this->init(&_M_stringbuf); }
+
+ /**
+ * @brief Starts with an empty string buffer.
* @param __mode Whether the buffer can read, or write, or both.
*
* @c ios_base::out is automatically included in @a mode.
* string class does its own memory management.
*/
explicit
- basic_ostringstream(ios_base::openmode __mode = ios_base::out)
+ basic_ostringstream(ios_base::openmode __mode)
: __ostream_type(), _M_stringbuf(__mode | ios_base::out)
{ this->init(&_M_stringbuf); }
public:
// Constructors/destructors
+
/**
* @brief Default constructor starts with an empty string buffer.
+ *
+ * Initializes @c sb using the mode @c in|out, and passes @c &sb
+ * to the base class initializer. Does not allocate any buffer.
+ *
+ * That's a lie. We initialize the base class with NULL, because the
+ * string class does its own memory management.
+ */
+ basic_stringstream()
+ : __iostream_type(), _M_stringbuf(ios_base::out | ios_base::in)
+ { this->init(&_M_stringbuf); }
+
+ /**
+ * @brief Starts with an empty string buffer.
* @param __m Whether the buffer can read, or write, or both.
*
- * Initializes @c sb using the mode from @c __m, and passes @c
- * &sb to the base class initializer. Does not allocate any
- * buffer.
+ * Initializes @c sb using the mode from @c __m, and passes @c &sb
+ * to the base class initializer. Does not allocate any buffer.
*
* That's a lie. We initialize the base class with NULL, because the
* string class does its own memory management.
*/
explicit
- basic_stringstream(ios_base::openmode __m = ios_base::out | ios_base::in)
+ basic_stringstream(ios_base::openmode __m)
: __iostream_type(), _M_stringbuf(__m)
{ this->init(&_M_stringbuf); }
--- /dev/null
+// Copyright (C) 2018 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// C++11 27.8.3.1 basic_istringstream constructors [istringstream.cons]
+
+// { dg-do run { target c++11 } }
+
+#include <sstream>
+#include <testsuite_common_types.h>
+
+void test01()
+{
+ // P0935R0
+ __gnu_test::implicitly_default_constructible test;
+ test.operator()<std::istringstream>();
+}
+
+int main()
+{
+ test01();
+}
--- /dev/null
+// Copyright (C) 2018 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// C++11 27.8.4.1 basic_ostringstream constructors [ostringstream.cons]
+
+// { dg-do run { target c++11 } }
+
+#include <sstream>
+#include <testsuite_common_types.h>
+
+void test01()
+{
+ // P0935R0
+ __gnu_test::implicitly_default_constructible test;
+ test.operator()<std::ostringstream>();
+}
+
+int main()
+{
+ test01();
+}
--- /dev/null
+// Copyright (C) 2018 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// C++11 27.8.2.1 basic_stringbuf constructors [stringbuf.cons]
+
+// { dg-do run { target c++11 } }
+
+#include <sstream>
+#include <testsuite_common_types.h>
+
+void test01()
+{
+ // P0935R0
+ __gnu_test::implicitly_default_constructible test;
+ test.operator()<std::stringbuf>();
+}
+
+int main()
+{
+ test01();
+}
--- /dev/null
+// Copyright (C) 2018 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// C++11 27.8.2.1 basic_stringbuf constructors [stringbuf.cons]
+
+// { dg-do run { target c++11 } }
+
+#include <sstream>
+#include <testsuite_common_types.h>
+
+void test01()
+{
+ // P0935R0
+ __gnu_test::implicitly_default_constructible test;
+ test.operator()<std::wstringbuf>();
+}
+
+int main()
+{
+ test01();
+}
--- /dev/null
+// Copyright (C) 2018 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// C++11 27.8.5.1 basic_stringstream constructors [stringstream.cons]
+
+// { dg-do run { target c++11 } }
+
+#include <sstream>
+#include <testsuite_common_types.h>
+
+void test01()
+{
+ // P0935R0
+ __gnu_test::implicitly_default_constructible test;
+ test.operator()<std::stringstream>();
+}
+
+int main()
+{
+ test01();
+}