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
This commit is contained in:
Phil Edwards 2001-12-27 07:26:00 +00:00
parent 7f729bc6b8
commit 2d53d9ebe7
3 changed files with 104 additions and 0 deletions

View File

@ -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.

View File

@ -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
@ -93,6 +94,17 @@ namespace std
#endif
//
// 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
//
@ -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

View File

@ -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;
}