From 2d53d9ebe7443d7fc11ef7e635aaca15cd0f500f Mon Sep 17 00:00:00 2001 From: Phil Edwards Date: Thu, 27 Dec 2001 07:26:00 +0000 Subject: [PATCH] re PR libstdc++/3829 (missing template instantiations) 2001-12-27 Phil Edwards PR libstdc++/3829 * src/misc-inst.cc: Many additional I/O-related instantiations. * testsuite/27_io/instantiations.cc: New file. From-SVN: r48324 --- libstdc++-v3/ChangeLog | 6 ++ libstdc++-v3/src/misc-inst.cc | 30 ++++++++ .../testsuite/27_io/instantiations.cc | 68 +++++++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 libstdc++-v3/testsuite/27_io/instantiations.cc diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 547b641e4ea..ffdc436a869 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2001-12-27 Phil Edwards + + PR libstdc++/3829 + * src/misc-inst.cc: Many additional I/O-related instantiations. + * testsuite/27_io/instantiations.cc: New file. + 2001-12-26 Benjamin Kosnik * testsuite/24_iterators/insert_iterator.cc (test02): Add. diff --git a/libstdc++-v3/src/misc-inst.cc b/libstdc++-v3/src/misc-inst.cc index 484a551c44d..ab2f2aa6385 100644 --- a/libstdc++-v3/src/misc-inst.cc +++ b/libstdc++-v3/src/misc-inst.cc @@ -44,6 +44,7 @@ #include #include #include +#include // NB: unnecessary if the .h headers include these #ifndef _GLIBCPP_FULLY_COMPLIANT_HEADERS @@ -93,6 +94,17 @@ namespace std #endif + // + // iomanip + // + template class _Setfill; + template _Setfill setfill(char); +#ifdef _GLIBCPP_USE_WCHAR_T + template class _Setfill; + template _Setfill setfill(wchar_t); +#endif + + // // istream // @@ -104,11 +116,20 @@ namespace std template istream& operator>>(istream&, char*); template istream& operator>>(istream&, unsigned char*); template istream& operator>>(istream&, signed char*); + + template istream& operator>>(istream&, _Setiosflags); + template istream& operator>>(istream&, _Resetiosflags); + template istream& operator>>(istream&, _Setbase); + template istream& operator>>(istream&, _Setfill); + template istream& operator>>(istream&, _Setprecision); + template istream& operator>>(istream&, _Setw); + #ifdef _GLIBCPP_USE_WCHAR_T template class basic_istream; template wistream& ws(wistream&); template wistream& operator>>(wistream&, wchar_t&); template wistream& operator>>(wistream&, wchar_t*); + template wistream& operator>>(wistream&, _Setfill); #endif @@ -125,6 +146,14 @@ namespace std template ostream& operator<<(ostream&, const char*); template ostream& operator<<(ostream&, const unsigned char*); template ostream& operator<<(ostream&, const signed char*); + + template ostream& operator<<(ostream&, _Setiosflags); + template ostream& operator<<(ostream&, _Resetiosflags); + template ostream& operator<<(ostream&, _Setbase); + template ostream& operator<<(ostream&, _Setfill); + template ostream& operator<<(ostream&, _Setprecision); + template ostream& operator<<(ostream&, _Setw); + #ifdef _GLIBCPP_USE_WCHAR_T template class basic_ostream; template wostream& endl(wostream&); @@ -134,6 +163,7 @@ namespace std template wostream& operator<<(wostream&, char); template wostream& operator<<(wostream&, const wchar_t*); template wostream& operator<<(wostream&, const char*); + template wostream& operator<<(wostream&, _Setfill); #endif diff --git a/libstdc++-v3/testsuite/27_io/instantiations.cc b/libstdc++-v3/testsuite/27_io/instantiations.cc new file mode 100644 index 00000000000..6f87982c980 --- /dev/null +++ b/libstdc++-v3/testsuite/27_io/instantiations.cc @@ -0,0 +1,68 @@ +// Copyright (C) 2001 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// Some members need to be explicitly instantiated, so that users can build +// their own code with -fno-implicit-templates and not suffer from a zillion +// link errors. + +// { dg-options "-fno-implicit-templates" } + +#include +#include +#include +#include +#include +#include + + +// PR libstdc++/3829 +void +test01() +{ + using namespace std; + string x (" this is text"); + istringstream sin (x); + ostringstream sout; + + // same order as in bits/std_iomanip.h + sin >> resetiosflags(ios_base::dec) + >> setiosflags(ios_base::dec) + >> setbase(ios_base::dec) + >> setfill('c') + >> setprecision(5) + >> setw(20) + >> ws; + VERIFY(sin); + + sout << resetiosflags(ios_base::dec) + << setiosflags(ios_base::dec) + << setbase(ios_base::dec) + << setfill('c') + << setprecision(5) + << setw(20) + << ends << flush << endl; + VERIFY(sout); +} + + +int +main() +{ + test01(); + return 0; +} -- 2.30.2