xref: /netbsd-src/external/gpl3/gcc/dist/libstdc++-v3/include/std/iosfwd (revision b1e838363e3c6fc78a55519254d99869742dd33c)
148fb7bfaSmrg// <iosfwd> Forward declarations -*- C++ -*-
24fee23f9Smrg
3*b1e83836Smrg// Copyright (C) 1997-2022 Free Software Foundation, Inc.
44fee23f9Smrg//
54fee23f9Smrg// This file is part of the GNU ISO C++ Library.  This library is free
64fee23f9Smrg// software; you can redistribute it and/or modify it under the
74fee23f9Smrg// terms of the GNU General Public License as published by the
84fee23f9Smrg// Free Software Foundation; either version 3, or (at your option)
94fee23f9Smrg// any later version.
104fee23f9Smrg
114fee23f9Smrg// This library is distributed in the hope that it will be useful,
124fee23f9Smrg// but WITHOUT ANY WARRANTY; without even the implied warranty of
134fee23f9Smrg// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
144fee23f9Smrg// GNU General Public License for more details.
154fee23f9Smrg
164fee23f9Smrg// Under Section 7 of GPL version 3, you are granted additional
174fee23f9Smrg// permissions described in the GCC Runtime Library Exception, version
184fee23f9Smrg// 3.1, as published by the Free Software Foundation.
194fee23f9Smrg
204fee23f9Smrg// You should have received a copy of the GNU General Public License and
214fee23f9Smrg// a copy of the GCC Runtime Library Exception along with this program;
224fee23f9Smrg// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
234fee23f9Smrg// <http://www.gnu.org/licenses/>.
244fee23f9Smrg
2548fb7bfaSmrg/** @file include/iosfwd
264fee23f9Smrg *  This is a Standard C++ Library header.
274fee23f9Smrg */
284fee23f9Smrg
294fee23f9Smrg//
304fee23f9Smrg// ISO C++ 14882: 27.2  Forward declarations
314fee23f9Smrg//
324fee23f9Smrg
334fee23f9Smrg#ifndef _GLIBCXX_IOSFWD
344fee23f9Smrg#define _GLIBCXX_IOSFWD 1
354fee23f9Smrg
364fee23f9Smrg#pragma GCC system_header
374fee23f9Smrg
384fee23f9Smrg#include <bits/c++config.h>
394fee23f9Smrg#include <bits/stringfwd.h> 	// For string forward declarations.
404fee23f9Smrg#include <bits/postypes.h>
414fee23f9Smrg
4248fb7bfaSmrgnamespace std _GLIBCXX_VISIBILITY(default)
4348fb7bfaSmrg{
4448fb7bfaSmrg_GLIBCXX_BEGIN_NAMESPACE_VERSION
454fee23f9Smrg
464fee23f9Smrg  /**
474fee23f9Smrg   *  @defgroup io I/O
484fee23f9Smrg   *
494fee23f9Smrg   *  Nearly all of the I/O classes are parameterized on the type of
504fee23f9Smrg   *  characters they read and write.  (The major exception is ios_base at
514fee23f9Smrg   *  the top of the hierarchy.)  This is a change from pre-Standard
524fee23f9Smrg   *  streams, which were not templates.
534fee23f9Smrg   *
544fee23f9Smrg   *  For ease of use and compatibility, all of the basic_* I/O-related
554fee23f9Smrg   *  classes are given typedef names for both of the builtin character
564fee23f9Smrg   *  widths (wide and narrow).  The typedefs are the same as the
574fee23f9Smrg   *  pre-Standard names, for example:
584fee23f9Smrg   *
594fee23f9Smrg   *  @code
604fee23f9Smrg   *     typedef basic_ifstream<char>  ifstream;
614fee23f9Smrg   *  @endcode
624fee23f9Smrg   *
634fee23f9Smrg   *  Because properly forward-declaring these classes can be difficult, you
644fee23f9Smrg   *  should not do it yourself.  Instead, include the &lt;iosfwd&gt;
654fee23f9Smrg   *  header, which contains only declarations of all the I/O classes as
664fee23f9Smrg   *  well as the typedefs.  Trying to forward-declare the typedefs
674fee23f9Smrg   *  themselves (e.g., <code>class ostream;</code>) is not valid ISO C++.
684fee23f9Smrg   *
694fee23f9Smrg   *  For more specific declarations, see
704d5abbe8Smrg   *  https://gcc.gnu.org/onlinedocs/libstdc++/manual/io.html#std.io.objects
714fee23f9Smrg   *
724fee23f9Smrg   *  @{
734fee23f9Smrg  */
744fee23f9Smrg  class ios_base;
754fee23f9Smrg
764fee23f9Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT> >
774fee23f9Smrg    class basic_ios;
784fee23f9Smrg
794fee23f9Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT> >
804fee23f9Smrg    class basic_streambuf;
814fee23f9Smrg
824fee23f9Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT> >
834fee23f9Smrg    class basic_istream;
844fee23f9Smrg
854fee23f9Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT> >
864fee23f9Smrg    class basic_ostream;
874fee23f9Smrg
884fee23f9Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT> >
894fee23f9Smrg    class basic_iostream;
904fee23f9Smrg
914d5abbe8Smrg
924d5abbe8Smrg_GLIBCXX_BEGIN_NAMESPACE_CXX11
934d5abbe8Smrg
944fee23f9Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT>,
954fee23f9Smrg	    typename _Alloc = allocator<_CharT> >
964fee23f9Smrg    class basic_stringbuf;
974fee23f9Smrg
984fee23f9Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT>,
994fee23f9Smrg	   typename _Alloc = allocator<_CharT> >
1004fee23f9Smrg    class basic_istringstream;
1014fee23f9Smrg
1024fee23f9Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT>,
1034fee23f9Smrg	   typename _Alloc = allocator<_CharT> >
1044fee23f9Smrg    class basic_ostringstream;
1054fee23f9Smrg
1064fee23f9Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT>,
1074fee23f9Smrg	   typename _Alloc = allocator<_CharT> >
1084fee23f9Smrg    class basic_stringstream;
1094fee23f9Smrg
1104d5abbe8Smrg_GLIBCXX_END_NAMESPACE_CXX11
1114d5abbe8Smrg
1124fee23f9Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT> >
1134fee23f9Smrg    class basic_filebuf;
1144fee23f9Smrg
1154fee23f9Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT> >
1164fee23f9Smrg    class basic_ifstream;
1174fee23f9Smrg
1184fee23f9Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT> >
1194fee23f9Smrg    class basic_ofstream;
1204fee23f9Smrg
1214fee23f9Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT> >
1224fee23f9Smrg    class basic_fstream;
1234fee23f9Smrg
1244fee23f9Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT> >
1254fee23f9Smrg    class istreambuf_iterator;
1264fee23f9Smrg
1274fee23f9Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT> >
1284fee23f9Smrg    class ostreambuf_iterator;
1294fee23f9Smrg
1304fee23f9Smrg
13148fb7bfaSmrg  /// Base class for @c char streams.
13248fb7bfaSmrg  typedef basic_ios<char> 		ios;
13348fb7bfaSmrg
13448fb7bfaSmrg  /// Base class for @c char buffers.
13548fb7bfaSmrg  typedef basic_streambuf<char> 	streambuf;
13648fb7bfaSmrg
13748fb7bfaSmrg  /// Base class for @c char input streams.
13848fb7bfaSmrg  typedef basic_istream<char> 		istream;
13948fb7bfaSmrg
14048fb7bfaSmrg  /// Base class for @c char output streams.
14148fb7bfaSmrg  typedef basic_ostream<char> 		ostream;
14248fb7bfaSmrg
14348fb7bfaSmrg  /// Base class for @c char mixed input and output streams.
14448fb7bfaSmrg  typedef basic_iostream<char> 		iostream;
14548fb7bfaSmrg
14648fb7bfaSmrg  /// Class for @c char memory buffers.
14748fb7bfaSmrg  typedef basic_stringbuf<char> 	stringbuf;
14848fb7bfaSmrg
14948fb7bfaSmrg  /// Class for @c char input memory streams.
15048fb7bfaSmrg  typedef basic_istringstream<char> 	istringstream;
15148fb7bfaSmrg
15248fb7bfaSmrg  /// Class for @c char output memory streams.
15348fb7bfaSmrg  typedef basic_ostringstream<char> 	ostringstream;
15448fb7bfaSmrg
15548fb7bfaSmrg  /// Class for @c char mixed input and output memory streams.
15648fb7bfaSmrg  typedef basic_stringstream<char> 	stringstream;
15748fb7bfaSmrg
15848fb7bfaSmrg  /// Class for @c char file buffers.
15948fb7bfaSmrg  typedef basic_filebuf<char> 		filebuf;
16048fb7bfaSmrg
16148fb7bfaSmrg  /// Class for @c char input file streams.
16248fb7bfaSmrg  typedef basic_ifstream<char> 		ifstream;
16348fb7bfaSmrg
16448fb7bfaSmrg  /// Class for @c char output file streams.
16548fb7bfaSmrg  typedef basic_ofstream<char> 		ofstream;
16648fb7bfaSmrg
16748fb7bfaSmrg  /// Class for @c char mixed input and output file streams.
16848fb7bfaSmrg  typedef basic_fstream<char> 		fstream;
1694fee23f9Smrg
1704fee23f9Smrg#ifdef _GLIBCXX_USE_WCHAR_T
17148fb7bfaSmrg  /// Base class for @c wchar_t streams.
17248fb7bfaSmrg  typedef basic_ios<wchar_t> 		wios;
17348fb7bfaSmrg
17448fb7bfaSmrg  /// Base class for @c wchar_t buffers.
17548fb7bfaSmrg  typedef basic_streambuf<wchar_t> 	wstreambuf;
17648fb7bfaSmrg
17748fb7bfaSmrg  /// Base class for @c wchar_t input streams.
17848fb7bfaSmrg  typedef basic_istream<wchar_t> 	wistream;
17948fb7bfaSmrg
18048fb7bfaSmrg  /// Base class for @c wchar_t output streams.
18148fb7bfaSmrg  typedef basic_ostream<wchar_t> 	wostream;
18248fb7bfaSmrg
18348fb7bfaSmrg  /// Base class for @c wchar_t mixed input and output streams.
18448fb7bfaSmrg  typedef basic_iostream<wchar_t> 	wiostream;
18548fb7bfaSmrg
18648fb7bfaSmrg  /// Class for @c wchar_t memory buffers.
18748fb7bfaSmrg  typedef basic_stringbuf<wchar_t> 	wstringbuf;
18848fb7bfaSmrg
18948fb7bfaSmrg  /// Class for @c wchar_t input memory streams.
19048fb7bfaSmrg  typedef basic_istringstream<wchar_t> 	wistringstream;
19148fb7bfaSmrg
19248fb7bfaSmrg  /// Class for @c wchar_t output memory streams.
19348fb7bfaSmrg  typedef basic_ostringstream<wchar_t> 	wostringstream;
19448fb7bfaSmrg
19548fb7bfaSmrg  /// Class for @c wchar_t mixed input and output memory streams.
19648fb7bfaSmrg  typedef basic_stringstream<wchar_t> 	wstringstream;
19748fb7bfaSmrg
19848fb7bfaSmrg  /// Class for @c wchar_t file buffers.
19948fb7bfaSmrg  typedef basic_filebuf<wchar_t> 	wfilebuf;
20048fb7bfaSmrg
20148fb7bfaSmrg  /// Class for @c wchar_t input file streams.
20248fb7bfaSmrg  typedef basic_ifstream<wchar_t> 	wifstream;
20348fb7bfaSmrg
20448fb7bfaSmrg  /// Class for @c wchar_t output file streams.
20548fb7bfaSmrg  typedef basic_ofstream<wchar_t> 	wofstream;
20648fb7bfaSmrg
20748fb7bfaSmrg  /// Class for @c wchar_t mixed input and output file streams.
20848fb7bfaSmrg  typedef basic_fstream<wchar_t> 	wfstream;
2094fee23f9Smrg#endif
210*b1e83836Smrg
211*b1e83836Smrg#if __cplusplus >= 202002L && _GLIBCXX_USE_CXX11_ABI
212*b1e83836Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT>,
213*b1e83836Smrg           typename _Allocator = allocator<_CharT>>
214*b1e83836Smrg    class basic_syncbuf;
215*b1e83836Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT>,
216*b1e83836Smrg           typename _Allocator = allocator<_CharT>>
217*b1e83836Smrg    class basic_osyncstream;
218*b1e83836Smrg
219*b1e83836Smrg  using syncbuf = basic_syncbuf<char>;
220*b1e83836Smrg  using osyncstream = basic_osyncstream<char>;
221*b1e83836Smrg
222*b1e83836Smrg#ifdef _GLIBCXX_USE_WCHAR_T
223*b1e83836Smrg  using wsyncbuf = basic_syncbuf<wchar_t>;
224*b1e83836Smrg  using wosyncstream = basic_osyncstream<wchar_t>;
225*b1e83836Smrg#endif
226*b1e83836Smrg#endif // C++20 && CXX11_ABI
227*b1e83836Smrg
228*b1e83836Smrg#if __cplusplus > 202002L
229*b1e83836Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT>>
230*b1e83836Smrg    class basic_spanbuf;
231*b1e83836Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT>>
232*b1e83836Smrg    class basic_ispanstream;
233*b1e83836Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT>>
234*b1e83836Smrg    class basic_ospanstream;
235*b1e83836Smrg  template<typename _CharT, typename _Traits = char_traits<_CharT>>
236*b1e83836Smrg    class basic_spanstream;
237*b1e83836Smrg
238*b1e83836Smrg  using spanbuf     = basic_spanbuf<char>;
239*b1e83836Smrg  using ispanstream = basic_ispanstream<char>;
240*b1e83836Smrg  using ospanstream = basic_ospanstream<char>;
241*b1e83836Smrg  using spanstream  = basic_spanstream<char>;
242*b1e83836Smrg
243*b1e83836Smrg#ifdef _GLIBCXX_USE_WCHAR_T
244*b1e83836Smrg  using wspanbuf     = basic_spanbuf<wchar_t>;
245*b1e83836Smrg  using wispanstream = basic_ispanstream<wchar_t>;
246*b1e83836Smrg  using wospanstream = basic_ospanstream<wchar_t>;
247*b1e83836Smrg  using wspanstream  = basic_spanstream<wchar_t>;
248*b1e83836Smrg#endif
249*b1e83836Smrg#endif // C++23
250*b1e83836Smrg
2514fee23f9Smrg  /** @}  */
2524fee23f9Smrg
25348fb7bfaSmrg_GLIBCXX_END_NAMESPACE_VERSION
25448fb7bfaSmrg} // namespace
2554fee23f9Smrg
2564fee23f9Smrg#endif /* _GLIBCXX_IOSFWD */
257