[iostream.forward] # 31 Input/output library [[input.output]](./#input.output) ## 31.3 Forward declarations [iostream.forward] ### [31.3.1](#iosfwd.syn) Header synopsis [[iosfwd.syn]](iosfwd.syn) [🔗](#header:%3ciosfwd%3e) namespace std {template struct char_traits; template<> struct char_traits; template<> struct char_traits; template<> struct char_traits; template<> struct char_traits; template<> struct char_traits; template class allocator; template>class basic_ios; template>class basic_streambuf; template>class basic_istream; template>class basic_ostream; template>class basic_iostream; template, class Allocator = allocator>class basic_stringbuf; template, class Allocator = allocator>class basic_istringstream; template, class Allocator = allocator>class basic_ostringstream; template, class Allocator = allocator>class basic_stringstream; template>class basic_spanbuf; template>class basic_ispanstream; template>class basic_ospanstream; template>class basic_spanstream; template>class basic_filebuf; template>class basic_ifstream; template>class basic_ofstream; template>class basic_fstream; template, class Allocator = allocator>class basic_syncbuf; template, class Allocator = allocator>class basic_osyncstream; template>class istreambuf_iterator; template>class ostreambuf_iterator; using ios = basic_ios; using wios = basic_ios; using streambuf = basic_streambuf; using istream = basic_istream; using ostream = basic_ostream; using iostream = basic_iostream; using stringbuf = basic_stringbuf; using istringstream = basic_istringstream; using ostringstream = basic_ostringstream; using stringstream = basic_stringstream; using spanbuf = basic_spanbuf; using ispanstream = basic_ispanstream; using ospanstream = basic_ospanstream; using spanstream = basic_spanstream; using filebuf = basic_filebuf; using ifstream = basic_ifstream; using ofstream = basic_ofstream; using fstream = basic_fstream; using syncbuf = basic_syncbuf; using osyncstream = basic_osyncstream; using wstreambuf = basic_streambuf; using wistream = basic_istream; using wostream = basic_ostream; using wiostream = basic_iostream; using wstringbuf = basic_stringbuf; using wistringstream = basic_istringstream; using wostringstream = basic_ostringstream; using wstringstream = basic_stringstream; using wspanbuf = basic_spanbuf; using wispanstream = basic_ispanstream; using wospanstream = basic_ospanstream; using wspanstream = basic_spanstream; using wfilebuf = basic_filebuf; using wifstream = basic_ifstream; using wofstream = basic_ofstream; using wfstream = basic_fstream; using wsyncbuf = basic_syncbuf; using wosyncstream = basic_osyncstream; template class fpos; using streampos = fpos::state_type>; using wstreampos = fpos::state_type>; using u8streampos = fpos::state_type>; using u16streampos = fpos::state_type>; using u32streampos = fpos::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[](#header:%3ciosfwd%3e "31.3.1 Header synopsis [iosfwd.syn]") and in the synopsis of other headers but it is well-formed to include both[](#header:%3ciosfwd%3e "31.3.1 Header 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 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 [](#header:%3ciosfwd%3e "31.3.1 Header 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 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 andbasic_ostream[.](#overview-1.sentence-2) [2](#overview-2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L359) The class template specializationbasic_streambuf 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 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 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 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[.](#overview-9.sentence-1) An implementation can avoid this circularity by substituting equivalent types[.](#overview-9.sentence-2) — *end note*]