197403Sobrien// Forwarding declarations -*- C++ -*-
297403Sobrien
3169691Skan// Copyright (C) 1997, 1998, 1999, 2001, 2002, 2003, 2005
4117397Skan// Free Software Foundation, Inc.
597403Sobrien//
697403Sobrien// This file is part of the GNU ISO C++ Library.  This library is free
797403Sobrien// software; you can redistribute it and/or modify it under the
897403Sobrien// terms of the GNU General Public License as published by the
997403Sobrien// Free Software Foundation; either version 2, or (at your option)
1097403Sobrien// any later version.
1197403Sobrien
1297403Sobrien// This library is distributed in the hope that it will be useful,
1397403Sobrien// but WITHOUT ANY WARRANTY; without even the implied warranty of
1497403Sobrien// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1597403Sobrien// GNU General Public License for more details.
1697403Sobrien
1797403Sobrien// You should have received a copy of the GNU General Public License along
1897403Sobrien// with this library; see the file COPYING.  If not, write to the Free
19169691Skan// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
2097403Sobrien// USA.
2197403Sobrien
2297403Sobrien// As a special exception, you may use this file as part of a free software
2397403Sobrien// library without restriction.  Specifically, if other files instantiate
2497403Sobrien// templates or use macros or inline functions from this file, or you compile
2597403Sobrien// this file and link it with other files to produce an executable, this
2697403Sobrien// file does not by itself cause the resulting executable to be covered by
2797403Sobrien// the GNU General Public License.  This exception does not however
2897403Sobrien// invalidate any other reasons why the executable file might be covered by
2997403Sobrien// the GNU General Public License.
3097403Sobrien
31169691Skan/** @file iosfwd
32169691Skan *  This is a Standard C++ Library header.
33169691Skan */
34169691Skan
3597403Sobrien//
3697403Sobrien// ISO C++ 14882: 27.2  Forward declarations
3797403Sobrien//
3897403Sobrien
39132720Skan#ifndef _GLIBCXX_IOSFWD
40132720Skan#define _GLIBCXX_IOSFWD 1
4197403Sobrien
4297403Sobrien#pragma GCC system_header
4397403Sobrien
4497403Sobrien#include <bits/c++config.h>
45117397Skan#include <bits/c++locale.h>
46132720Skan#include <bits/c++io.h>
47117397Skan#include <cctype>		// For isspace, etc.
48117397Skan#include <bits/stringfwd.h> 	// For string forward declarations.
49132720Skan#include <bits/postypes.h>
5097403Sobrien#include <bits/functexcept.h>
5197403Sobrien
52169691Skan_GLIBCXX_BEGIN_NAMESPACE(std)
53169691Skan
5497403Sobrien  template<typename _CharT, typename _Traits = char_traits<_CharT> >
5597403Sobrien    class basic_ios;
5697403Sobrien
5797403Sobrien  template<typename _CharT, typename _Traits = char_traits<_CharT> >
5897403Sobrien    class basic_streambuf;
5997403Sobrien
6097403Sobrien  template<typename _CharT, typename _Traits = char_traits<_CharT> >
6197403Sobrien    class basic_istream;
6297403Sobrien
6397403Sobrien  template<typename _CharT, typename _Traits = char_traits<_CharT> >
6497403Sobrien    class basic_ostream;
6597403Sobrien
6697403Sobrien  template<typename _CharT, typename _Traits = char_traits<_CharT> >
6797403Sobrien    class basic_iostream;
6897403Sobrien
6997403Sobrien  template<typename _CharT, typename _Traits = char_traits<_CharT>,
7097403Sobrien	    typename _Alloc = allocator<_CharT> >
7197403Sobrien    class basic_stringbuf;
7297403Sobrien
7397403Sobrien  template<typename _CharT, typename _Traits = char_traits<_CharT>,
7497403Sobrien	   typename _Alloc = allocator<_CharT> >
7597403Sobrien    class basic_istringstream;
7697403Sobrien
7797403Sobrien  template<typename _CharT, typename _Traits = char_traits<_CharT>,
7897403Sobrien	   typename _Alloc = allocator<_CharT> >
7997403Sobrien    class basic_ostringstream;
8097403Sobrien
8197403Sobrien  template<typename _CharT, typename _Traits = char_traits<_CharT>,
8297403Sobrien	   typename _Alloc = allocator<_CharT> >
8397403Sobrien    class basic_stringstream;
8497403Sobrien
8597403Sobrien  template<typename _CharT, typename _Traits = char_traits<_CharT> >
8697403Sobrien    class basic_filebuf;
8797403Sobrien
8897403Sobrien  template<typename _CharT, typename _Traits = char_traits<_CharT> >
8997403Sobrien    class basic_ifstream;
9097403Sobrien
9197403Sobrien  template<typename _CharT, typename _Traits = char_traits<_CharT> >
9297403Sobrien    class basic_ofstream;
9397403Sobrien
9497403Sobrien  template<typename _CharT, typename _Traits = char_traits<_CharT> >
9597403Sobrien    class basic_fstream;
9697403Sobrien
9797403Sobrien  template<typename _CharT, typename _Traits = char_traits<_CharT> >
9897403Sobrien    class istreambuf_iterator;
9997403Sobrien
10097403Sobrien  template<typename _CharT, typename _Traits = char_traits<_CharT> >
10197403Sobrien    class ostreambuf_iterator;
10297403Sobrien
103132720Skan  // _GLIBCXX_RESOLVE_LIB_DEFECTS
10497403Sobrien  // Not included.   (??? Apparently no LWG number?)
10597403Sobrien  class ios_base;
10697403Sobrien
107117397Skan  /**
108117397Skan   *  @defgroup s27_2_iosfwd I/O Forward Declarations
109117397Skan   *
110117397Skan   *  Nearly all of the I/O classes are parameterized on the type of
111117397Skan   *  characters they read and write.  (The major exception is ios_base at
112117397Skan   *  the top of the hierarchy.)  This is a change from pre-Standard
113117397Skan   *  streams, which were not templates.
114117397Skan   *
115117397Skan   *  For ease of use and compatibility, all of the basic_* I/O-related
116117397Skan   *  classes are given typedef names for both of the builtin character
117117397Skan   *  widths (wide and narrow).  The typedefs are the same as the
118117397Skan   *  pre-Standard names, for example:
119117397Skan   *
120117397Skan   *  @code
121117397Skan   *     typedef basic_ifstream<char>  ifstream;
122117397Skan   *  @endcode
123117397Skan   *
124117397Skan   *  Because properly forward-declaring these classes can be difficult, you
125117397Skan   *  should not do it yourself.  Instead, include the &lt;iosfwd&gt;
126117397Skan   *  header, which contains only declarations of all the I/O classes as
127117397Skan   *  well as the typedefs.  Trying to forward-declare the typedefs
128117397Skan   *  themselves (e.g., "class ostream;") is not valid ISO C++.
129117397Skan   *
130117397Skan   *  For more specific declarations, see
131117397Skan   *  http://gcc.gnu.org/onlinedocs/libstdc++/27_io/howto.html#10
132117397Skan   *
133117397Skan   *  @{
134117397Skan  */
135117397Skan  typedef basic_ios<char> 		ios;		///< @isiosfwd
136117397Skan  typedef basic_streambuf<char> 	streambuf;	///< @isiosfwd
137117397Skan  typedef basic_istream<char> 		istream;	///< @isiosfwd
138117397Skan  typedef basic_ostream<char> 		ostream;	///< @isiosfwd
139117397Skan  typedef basic_iostream<char> 		iostream;	///< @isiosfwd
140117397Skan  typedef basic_stringbuf<char> 	stringbuf;	///< @isiosfwd
141117397Skan  typedef basic_istringstream<char> 	istringstream;	///< @isiosfwd
142117397Skan  typedef basic_ostringstream<char> 	ostringstream;	///< @isiosfwd
143117397Skan  typedef basic_stringstream<char> 	stringstream;	///< @isiosfwd
144117397Skan  typedef basic_filebuf<char> 		filebuf;	///< @isiosfwd
145117397Skan  typedef basic_ifstream<char> 		ifstream;	///< @isiosfwd
146117397Skan  typedef basic_ofstream<char> 		ofstream;	///< @isiosfwd
147117397Skan  typedef basic_fstream<char> 		fstream;	///< @isiosfwd
14897403Sobrien
149132720Skan#ifdef _GLIBCXX_USE_WCHAR_T
150117397Skan  typedef basic_ios<wchar_t> 		wios;		///< @isiosfwd
151117397Skan  typedef basic_streambuf<wchar_t> 	wstreambuf;	///< @isiosfwd
152117397Skan  typedef basic_istream<wchar_t> 	wistream;	///< @isiosfwd
153117397Skan  typedef basic_ostream<wchar_t> 	wostream;	///< @isiosfwd
154117397Skan  typedef basic_iostream<wchar_t> 	wiostream;	///< @isiosfwd
155117397Skan  typedef basic_stringbuf<wchar_t> 	wstringbuf;	///< @isiosfwd
156117397Skan  typedef basic_istringstream<wchar_t> 	wistringstream;	///< @isiosfwd
157117397Skan  typedef basic_ostringstream<wchar_t> 	wostringstream;	///< @isiosfwd
158117397Skan  typedef basic_stringstream<wchar_t> 	wstringstream;	///< @isiosfwd
159117397Skan  typedef basic_filebuf<wchar_t> 	wfilebuf;	///< @isiosfwd
160117397Skan  typedef basic_ifstream<wchar_t> 	wifstream;	///< @isiosfwd
161117397Skan  typedef basic_ofstream<wchar_t> 	wofstream;	///< @isiosfwd
162117397Skan  typedef basic_fstream<wchar_t> 	wfstream;	///< @isiosfwd
163107606Sobrien#endif
164117397Skan  /** @}  */
16597403Sobrien
166169691Skan_GLIBCXX_END_NAMESPACE
167169691Skan
168132720Skan#endif /* _GLIBCXX_IOSFWD */
169