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 <iosfwd> 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