diff options
author | Phil Edwards <pme@gcc.gnu.org> | 2001-12-27 07:26:00 +0000 |
---|---|---|
committer | Phil Edwards <pme@gcc.gnu.org> | 2001-12-27 07:26:00 +0000 |
commit | 2d53d9ebe7443d7fc11ef7e635aaca15cd0f500f (patch) | |
tree | d18406ff2b15a17ed0dbfc1e7b6295f787ffbb7e | |
parent | 7f729bc6b88d155bf60665d706350c7847345c98 (diff) | |
download | gcc-2d53d9ebe7443d7fc11ef7e635aaca15cd0f500f.zip gcc-2d53d9ebe7443d7fc11ef7e635aaca15cd0f500f.tar.gz gcc-2d53d9ebe7443d7fc11ef7e635aaca15cd0f500f.tar.bz2 |
re PR libstdc++/3829 (missing template instantiations)
2001-12-27 Phil Edwards <pme@gcc.gnu.org>
PR libstdc++/3829
* src/misc-inst.cc: Many additional I/O-related instantiations.
* testsuite/27_io/instantiations.cc: New file.
From-SVN: r48324
-rw-r--r-- | libstdc++-v3/ChangeLog | 6 | ||||
-rw-r--r-- | libstdc++-v3/src/misc-inst.cc | 30 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/27_io/instantiations.cc | 68 |
3 files changed, 104 insertions, 0 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 547b641..ffdc436 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2001-12-27 Phil Edwards <pme@gcc.gnu.org> + + 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 <bkoz@waller.constant.com> * 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 484a551..ab2f2aa 100644 --- a/libstdc++-v3/src/misc-inst.cc +++ b/libstdc++-v3/src/misc-inst.cc @@ -44,6 +44,7 @@ #include <bits/std_istream.h> #include <bits/std_ostream.h> #include <bits/std_string.h> +#include <bits/std_iomanip.h> // NB: unnecessary if the .h headers include these #ifndef _GLIBCPP_FULLY_COMPLIANT_HEADERS @@ -94,6 +95,17 @@ namespace std // + // iomanip + // + template class _Setfill<char>; + template _Setfill<char> setfill(char); +#ifdef _GLIBCPP_USE_WCHAR_T + template class _Setfill<wchar_t>; + template _Setfill<wchar_t> setfill(wchar_t); +#endif + + + // // istream // template class basic_istream<char>; @@ -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<char>); + template istream& operator>>(istream&, _Setprecision); + template istream& operator>>(istream&, _Setw); + #ifdef _GLIBCPP_USE_WCHAR_T template class basic_istream<wchar_t>; template wistream& ws(wistream&); template wistream& operator>>(wistream&, wchar_t&); template wistream& operator>>(wistream&, wchar_t*); + template wistream& operator>>(wistream&, _Setfill<wchar_t>); #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<char>); + template ostream& operator<<(ostream&, _Setprecision); + template ostream& operator<<(ostream&, _Setw); + #ifdef _GLIBCPP_USE_WCHAR_T template class basic_ostream<wchar_t>; 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<wchar_t>); #endif diff --git a/libstdc++-v3/testsuite/27_io/instantiations.cc b/libstdc++-v3/testsuite/27_io/instantiations.cc new file mode 100644 index 0000000..6f87982 --- /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 <fstream> +#include <istream> +#include <ostream> +#include <sstream> +#include <iomanip> +#include <testsuite_hooks.h> + + +// 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; +} |