Init
This commit is contained in:
117
cppdraft/iostream/forward.md
Normal file
117
cppdraft/iostream/forward.md
Normal file
@@ -0,0 +1,117 @@
|
||||
[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.1 Header <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.1 Header <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.1 Header <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.2 Character 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.4 The 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*]
|
||||
Reference in New Issue
Block a user