Files
cppdraft_translate/cppdraft/iostream/forward.md
2025-10-25 03:02:53 +03:00

118 lines
8.5 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[iostream.forward]
# 31 Input/output library [[input.output]](./#input.output)
## 31.3 Forward declarations [iostream.forward]
### [31.3.1](#iosfwd.syn) Header <iosfwd> synopsis [[iosfwd.syn]](iosfwd.syn)
[🔗](#header:%3ciosfwd%3e)
namespace std {template<class charT> struct char_traits; template<> struct char_traits<char>; template<> struct char_traits<char8_t>; template<> struct char_traits<char16_t>; template<> struct char_traits<char32_t>; template<> struct char_traits<wchar_t>; template<class T> class allocator; template<class charT, class traits = char_traits<charT>>class basic_ios; template<class charT, class traits = char_traits<charT>>class basic_streambuf; template<class charT, class traits = char_traits<charT>>class basic_istream; template<class charT, class traits = char_traits<charT>>class basic_ostream; template<class charT, class traits = char_traits<charT>>class basic_iostream; template<class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>>class basic_stringbuf; template<class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>>class basic_istringstream; template<class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>>class basic_ostringstream; template<class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>>class basic_stringstream; template<class charT, class traits = char_traits<charT>>class basic_spanbuf; template<class charT, class traits = char_traits<charT>>class basic_ispanstream; template<class charT, class traits = char_traits<charT>>class basic_ospanstream; template<class charT, class traits = char_traits<charT>>class basic_spanstream; template<class charT, class traits = char_traits<charT>>class basic_filebuf; template<class charT, class traits = char_traits<charT>>class basic_ifstream; template<class charT, class traits = char_traits<charT>>class basic_ofstream; template<class charT, class traits = char_traits<charT>>class basic_fstream; template<class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>>class basic_syncbuf; template<class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>>class basic_osyncstream; template<class charT, class traits = char_traits<charT>>class istreambuf_iterator; template<class charT, class traits = char_traits<charT>>class ostreambuf_iterator; using ios = basic_ios<char>; using wios = basic_ios<wchar_t>; using streambuf = basic_streambuf<char>; using istream = basic_istream<char>; using ostream = basic_ostream<char>; using iostream = basic_iostream<char>; using stringbuf = basic_stringbuf<char>; using istringstream = basic_istringstream<char>; using ostringstream = basic_ostringstream<char>; using stringstream = basic_stringstream<char>; using spanbuf = basic_spanbuf<char>; using ispanstream = basic_ispanstream<char>; using ospanstream = basic_ospanstream<char>; using spanstream = basic_spanstream<char>; using filebuf = basic_filebuf<char>; using ifstream = basic_ifstream<char>; using ofstream = basic_ofstream<char>; using fstream = basic_fstream<char>; using syncbuf = basic_syncbuf<char>; using osyncstream = basic_osyncstream<char>; using wstreambuf = basic_streambuf<wchar_t>; using wistream = basic_istream<wchar_t>; using wostream = basic_ostream<wchar_t>; using wiostream = basic_iostream<wchar_t>; using wstringbuf = basic_stringbuf<wchar_t>; using wistringstream = basic_istringstream<wchar_t>; using wostringstream = basic_ostringstream<wchar_t>; using wstringstream = basic_stringstream<wchar_t>; using wspanbuf = basic_spanbuf<wchar_t>; using wispanstream = basic_ispanstream<wchar_t>; using wospanstream = basic_ospanstream<wchar_t>; using wspanstream = basic_spanstream<wchar_t>; using wfilebuf = basic_filebuf<wchar_t>; using wifstream = basic_ifstream<wchar_t>; using wofstream = basic_ofstream<wchar_t>; using wfstream = basic_fstream<wchar_t>; using wsyncbuf = basic_syncbuf<wchar_t>; using wosyncstream = basic_osyncstream<wchar_t>; template<class state> class fpos; using streampos = fpos<char_traits<char>::state_type>; using wstreampos = fpos<char_traits<wchar_t>::state_type>; using u8streampos = fpos<char_traits<char8_t>::state_type>; using u16streampos = fpos<char_traits<char16_t>::state_type>; using u32streampos = fpos<char_traits<char32_t>::state_type>;}
[1](#iosfwd.syn-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L323)
Default template arguments are described as appearing both in[<iosfwd>](#header:%3ciosfwd%3e "31.3.1Header <iosfwd> synopsis[iosfwd.syn]") and in the synopsis of other headers
but it is well-formed to include both[<iosfwd>](#header:%3ciosfwd%3e "31.3.1Header <iosfwd> synopsis[iosfwd.syn]") and one or more of the other headers[.](#iosfwd.syn-1.sentence-1)[257](#footnote-257 "It is the implementation's responsibility to implement headers so that including <iosfwd> and other headers does not violate the rules about multiple occurrences of default arguments.")
[257)](#footnote-257)[257)](#footnoteref-257)
It is the implementation's
responsibility to implement headers so
that including [<iosfwd>](#header:%3ciosfwd%3e "31.3.1Header <iosfwd> synopsis[iosfwd.syn]") and other headers does not violate the rules about
multiple occurrences of default arguments[.](#footnote-257.sentence-1)
### [31.3.2](#overview) Overview [[iostream.forward.overview]](iostream.forward.overview)
[1](#overview-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L340)
The
class template specializationbasic_ios<charT, traits> serves as a virtual base class for the
class templatesbasic_istream,basic_ostream,
and
class templates
derived from them[.](#overview-1.sentence-1)
basic_iostream is a class
template
derived from bothbasic_istream<charT, traits> andbasic_ostream<charT, traits>[.](#overview-1.sentence-2)
[2](#overview-2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L359)
The
class template specializationbasic_streambuf<charT, traits> serves as a base class for class templatesbasic_stringbuf,basic_filebuf,
andbasic_syncbuf[.](#overview-2.sentence-1)
[3](#overview-3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L369)
The
class template specializationbasic_istream<charT, traits> serves as a base class for class templatesbasic_istringstream andbasic_ifstream[.](#overview-3.sentence-1)
[4](#overview-4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L378)
The
class template specializationbasic_ostream<charT, traits> serves as a base class for class templatesbasic_ostringstream,basic_ofstream,
andbasic_osyncstream[.](#overview-4.sentence-1)
[5](#overview-5)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L388)
The
class template specializationbasic_iostream<charT, traits> serves as a base class for class templatesbasic_stringstream andbasic_fstream[.](#overview-5.sentence-1)
[6](#overview-6)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L397)
[*Note [1](#overview-note-1)*:
For each of the class templates above,
the program is ill-formed iftraits::char_type is not the same type ascharT ([[char.traits]](char.traits "27.2Character traits"))[.](#overview-6.sentence-1)
— *end note*]
[7](#overview-7)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L406)
Other [*typedef-name*](dcl.typedef#nt:typedef-name "9.2.4The typedef specifier[dcl.typedef]")*s* define instances of
class templates
specialized forchar orwchar_t types[.](#overview-7.sentence-1)
[8](#overview-8)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L415)
Specializations of the class templatefpos are
used for specifying file position information[.](#overview-8.sentence-1)
[*Example [1](#overview-example-1)*:
The typesstreampos andwstreampos are used for positioning streams specialized onchar andwchar_t respectively[.](#overview-8.sentence-2)
— *end example*]
[9](#overview-9)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L432)
[*Note [2](#overview-note-2)*:
This synopsis suggests a circularity betweenstreampos andchar_traits<char>[.](#overview-9.sentence-1)
An implementation can avoid this circularity by substituting equivalent
types[.](#overview-9.sentence-2)
— *end note*]