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