Init
This commit is contained in:
33
cppdraft/iostream/assign.md
Normal file
33
cppdraft/iostream/assign.md
Normal file
@@ -0,0 +1,33 @@
|
||||
[iostream.assign]
|
||||
|
||||
# 31 Input/output library [[input.output]](./#input.output)
|
||||
|
||||
## 31.7 Formatting and manipulators [[iostream.format]](iostream.format#iostream.assign)
|
||||
|
||||
### 31.7.5 Input streams [[input.streams]](input.streams#iostream.assign)
|
||||
|
||||
#### 31.7.5.7 Class template basic_iostream [[iostreamclass]](iostreamclass#iostream.assign)
|
||||
|
||||
#### 31.7.5.7.4 Assignment and swap [iostream.assign]
|
||||
|
||||
[ð](#lib:operator=,basic_iostream)
|
||||
|
||||
`basic_iostream& operator=(basic_iostream&& rhs);
|
||||
`
|
||||
|
||||
[1](#1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L5891)
|
||||
|
||||
*Effects*: Equivalent to swap(rhs)[.](#1.sentence-1)
|
||||
|
||||
[ð](#lib:swap,basic_iostream)
|
||||
|
||||
`void swap(basic_iostream& rhs);
|
||||
`
|
||||
|
||||
[2](#2)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L5902)
|
||||
|
||||
*Effects*: Calls basic_istream<charT, traits>::swap(rhs)[.](#2.sentence-1)
|
||||
41
cppdraft/iostream/cons.md
Normal file
41
cppdraft/iostream/cons.md
Normal file
@@ -0,0 +1,41 @@
|
||||
[iostream.cons]
|
||||
|
||||
# 31 Input/output library [[input.output]](./#input.output)
|
||||
|
||||
## 31.7 Formatting and manipulators [[iostream.format]](iostream.format#iostream.cons)
|
||||
|
||||
### 31.7.5 Input streams [[input.streams]](input.streams#iostream.cons)
|
||||
|
||||
#### 31.7.5.7 Class template basic_iostream [[iostreamclass]](iostreamclass#iostream.cons)
|
||||
|
||||
#### 31.7.5.7.2 Constructors [iostream.cons]
|
||||
|
||||
[ð](#lib:basic_iostream,constructor)
|
||||
|
||||
`explicit basic_iostream(basic_streambuf<charT, traits>* sb);
|
||||
`
|
||||
|
||||
[1](#1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L5842)
|
||||
|
||||
*Effects*: Initializes the base class subobjects withbasic_istream<charT, traits>(sb) ([[istream]](istream "31.7.5.2 Class template basic_istream"))
|
||||
and[basic_ostream<charT, traits>(sb)](ostream "31.7.6.2 Class template basic_ostream [ostream]")[.](#1.sentence-1)
|
||||
|
||||
[2](#2)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L5849)
|
||||
|
||||
*Postconditions*: rdbuf() == sb andgcount() == 0[.](#2.sentence-1)
|
||||
|
||||
[ð](#lib:basic_iostream,constructor_)
|
||||
|
||||
`basic_iostream(basic_iostream&& rhs);
|
||||
`
|
||||
|
||||
[3](#3)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L5862)
|
||||
|
||||
*Effects*: Move constructs from the rvalue rhs by
|
||||
constructing the basic_istream base class withstd::move(rhs)[.](#3.sentence-1)
|
||||
22
cppdraft/iostream/dest.md
Normal file
22
cppdraft/iostream/dest.md
Normal file
@@ -0,0 +1,22 @@
|
||||
[iostream.dest]
|
||||
|
||||
# 31 Input/output library [[input.output]](./#input.output)
|
||||
|
||||
## 31.7 Formatting and manipulators [[iostream.format]](iostream.format#iostream.dest)
|
||||
|
||||
### 31.7.5 Input streams [[input.streams]](input.streams#iostream.dest)
|
||||
|
||||
#### 31.7.5.7 Class template basic_iostream [[iostreamclass]](iostreamclass#iostream.dest)
|
||||
|
||||
#### 31.7.5.7.3 Destructor [iostream.dest]
|
||||
|
||||
[ð](#lib:basic_iostream,destructor)
|
||||
|
||||
`virtual ~basic_iostream();
|
||||
`
|
||||
|
||||
[1](#1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L5877)
|
||||
|
||||
*Remarks*: Does not perform any operations onrdbuf()[.](#1.sentence-1)
|
||||
3145
cppdraft/iostream/format.md
Normal file
3145
cppdraft/iostream/format.md
Normal file
File diff suppressed because it is too large
Load Diff
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*]
|
||||
97
cppdraft/iostream/forward/overview.md
Normal file
97
cppdraft/iostream/forward/overview.md
Normal file
@@ -0,0 +1,97 @@
|
||||
[iostream.forward.overview]
|
||||
|
||||
# 31 Input/output library [[input.output]](./#input.output)
|
||||
|
||||
## 31.3 Forward declarations [[iostream.forward]](iostream.forward#overview)
|
||||
|
||||
### 31.3.2 Overview [iostream.forward.overview]
|
||||
|
||||
[1](#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[.](#1.sentence-1)
|
||||
|
||||
basic_iostream is a class
|
||||
template
|
||||
derived from bothbasic_istream<charT, traits> andbasic_ostream<charT, traits>[.](#1.sentence-2)
|
||||
|
||||
[2](#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[.](#2.sentence-1)
|
||||
|
||||
[3](#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[.](#3.sentence-1)
|
||||
|
||||
[4](#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[.](#4.sentence-1)
|
||||
|
||||
[5](#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[.](#5.sentence-1)
|
||||
|
||||
[6](#6)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L397)
|
||||
|
||||
[*Note [1](#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"))[.](#6.sentence-1)
|
||||
|
||||
â *end note*]
|
||||
|
||||
[7](#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[.](#7.sentence-1)
|
||||
|
||||
[8](#8)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L415)
|
||||
|
||||
Specializations of the class templatefpos are
|
||||
used for specifying file position information[.](#8.sentence-1)
|
||||
|
||||
[*Example [1](#example-1)*:
|
||||
|
||||
The typesstreampos andwstreampos are used for positioning streams specialized onchar andwchar_t respectively[.](#8.sentence-2)
|
||||
|
||||
â *end example*]
|
||||
|
||||
[9](#9)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L432)
|
||||
|
||||
[*Note [2](#note-2)*:
|
||||
|
||||
This synopsis suggests a circularity betweenstreampos andchar_traits<char>[.](#9.sentence-1)
|
||||
|
||||
An implementation can avoid this circularity by substituting equivalent
|
||||
types[.](#9.sentence-2)
|
||||
|
||||
â *end note*]
|
||||
17
cppdraft/iostream/limits/imbue.md
Normal file
17
cppdraft/iostream/limits/imbue.md
Normal file
@@ -0,0 +1,17 @@
|
||||
[iostream.limits.imbue]
|
||||
|
||||
# 31 Input/output library [[input.output]](./#input.output)
|
||||
|
||||
## 31.2 Iostreams requirements [[iostreams.requirements]](iostreams.requirements#iostream.limits.imbue)
|
||||
|
||||
### 31.2.1 Imbue limitations [iostream.limits.imbue]
|
||||
|
||||
[1](#1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L44)
|
||||
|
||||
No function described in [[input.output]](input.output "31 Input/output library") except forios_base::imbue and basic_filebuf::pubimbue causes any instance ofbasic_ios::imbue orbasic_streambuf::imbue to be called[.](#1.sentence-1)
|
||||
|
||||
If any user function called from a function declared in [[input.output]](input.output "31 Input/output library") or
|
||||
as an overriding virtual function of any class declared in [[input.output]](input.output "31 Input/output library") callsimbue,
|
||||
the behavior is undefined[.](#1.sentence-2)
|
||||
232
cppdraft/iostream/objects.md
Normal file
232
cppdraft/iostream/objects.md
Normal file
@@ -0,0 +1,232 @@
|
||||
[iostream.objects]
|
||||
|
||||
# 31 Input/output library [[input.output]](./#input.output)
|
||||
|
||||
## 31.4 Standard iostream objects [iostream.objects]
|
||||
|
||||
### [31.4.1](#iostream.syn) Header <iostream> synopsis [[iostream.syn]](iostream.syn)
|
||||
|
||||
[ð](#header:%3ciostream%3e)
|
||||
|
||||
#include <ios> // see [[ios.syn]](ios.syn "31.5.1 Header <ios> synopsis")#include <streambuf> // see [[streambuf.syn]](streambuf.syn "31.6.1 Header <streambuf> synopsis")#include <istream> // see [[istream.syn]](istream.syn "31.7.1 Header <istream> synopsis")#include <ostream> // see [[ostream.syn]](ostream.syn "31.7.2 Header <ostream> synopsis")namespace std {extern istream cin; extern ostream cout; extern ostream cerr; extern ostream clog; extern wistream wcin; extern wostream wcout; extern wostream wcerr; extern wostream wclog;}
|
||||
|
||||
### [31.4.2](#overview) Overview [[iostream.objects.overview]](iostream.objects.overview)
|
||||
|
||||
[1](#overview-1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L468)
|
||||
|
||||
In this Clause, the type name FILE refers to
|
||||
the type FILE declared in [<cstdio>](cstdio.syn#header:%3ccstdio%3e "31.13.1 Header <cstdio> synopsis [cstdio.syn]")[.](#overview-1.sentence-1)
|
||||
|
||||
[2](#overview-2)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L472)
|
||||
|
||||
The header [<iostream>](#header:%3ciostream%3e "31.4.1 Header <iostream> synopsis [iostream.syn]") declares objects that associate objects with the
|
||||
standard C streams provided for by the functions declared in[<cstdio>](cstdio.syn#header:%3ccstdio%3e "31.13.1 Header <cstdio> synopsis [cstdio.syn]"), and includes all the headers necessary to use these objects[.](#overview-2.sentence-1)
|
||||
|
||||
The dynamic types of the stream buffers
|
||||
initially associated with these objects are unspecified,
|
||||
but they have the behavior specified forstd::basic_filebuf<char> orstd::basic_filebuf<wchar_t>[.](#overview-2.sentence-2)
|
||||
|
||||
[3](#overview-3)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L484)
|
||||
|
||||
The objects are constructed and the associations are established at some
|
||||
time prior to or during the first time an object of classios_base::Init is constructed, and in any case before the body
|
||||
of main ([[basic.start.main]](basic.start.main "6.10.3.1 main function")) begins execution[.](#overview-3.sentence-1)
|
||||
|
||||
The objects are not destroyed during program execution[.](#overview-3.sentence-2)[258](#footnote-258 "Constructors and destructors for objects with static storage duration can access these objects to read input from stdin or write output to stdout or stderr.")
|
||||
|
||||
[4](#overview-4)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L501)
|
||||
|
||||
*Recommended practice*: If it is possible for them to do so, implementations should
|
||||
initialize the objects earlier than required[.](#overview-4.sentence-1)
|
||||
|
||||
[5](#overview-5)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L506)
|
||||
|
||||
The results of including [<iostream>](#header:%3ciostream%3e "31.4.1 Header <iostream> synopsis [iostream.syn]") in a translation unit shall be as if[<iostream>](#header:%3ciostream%3e "31.4.1 Header <iostream> synopsis [iostream.syn]") defined an instance of ios_base::Init with static
|
||||
storage duration[.](#overview-5.sentence-1)
|
||||
|
||||
Each C++ library module ([[std.modules]](std.modules "16.4.2.4 Modules")) in a hosted implementation
|
||||
shall behave as if it contains an interface unit that
|
||||
defines an unexported ios_base::Init variable with
|
||||
ordered initialization ([[basic.start.dynamic]](basic.start.dynamic "6.10.3.3 Dynamic initialization of non-block variables"))[.](#overview-5.sentence-2)
|
||||
|
||||
[*Note [1](#overview-note-1)*:
|
||||
|
||||
As a result, the definition of that variable is appearance-ordered before
|
||||
any declaration following the point of importation of a C++ library module[.](#overview-5.sentence-3)
|
||||
|
||||
Whether such a definition exists is unobservable by a program that
|
||||
does not reference any of the standard iostream objects[.](#overview-5.sentence-4)
|
||||
|
||||
â *end note*]
|
||||
|
||||
[6](#overview-6)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L522)
|
||||
|
||||
Mixing operations on corresponding wide- and narrow-character streams
|
||||
follows the same semantics as mixing such operations onFILEs,
|
||||
as specified in the C standard library[.](#overview-6.sentence-1)
|
||||
|
||||
[7](#overview-7)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L528)
|
||||
|
||||
Concurrent access to a synchronized ([[ios.members.static]](ios.members.static "31.5.2.5 Static members")) standard iostream object's formatted and unformatted input ([[istream]](istream "31.7.5.2 Class template basic_istream")) and output ([[ostream]](ostream "31.7.6.2 Class template basic_ostream")) functions or a standard C stream by multiple threads does not result in a data race ([[intro.multithread]](intro.multithread "6.10.2 Multi-threaded executions and data races"))[.](#overview-7.sentence-1)
|
||||
|
||||
[*Note [2](#overview-note-2)*:
|
||||
|
||||
Unsynchronized concurrent use of these objects and streams by multiple threads
|
||||
can result in interleaved characters[.](#overview-7.sentence-2)
|
||||
|
||||
â *end note*]
|
||||
|
||||
See also: ISO/IEC 9899:2024, 7.21.2
|
||||
|
||||
[258)](#footnote-258)[258)](#footnoteref-258)
|
||||
|
||||
Constructors and destructors for objects with
|
||||
static storage duration can
|
||||
access these objects to read input fromstdin or write output tostdout orstderr[.](#footnote-258.sentence-1)
|
||||
|
||||
### [31.4.3](#narrow.stream.objects) Narrow stream objects [[narrow.stream.objects]](narrow.stream.objects)
|
||||
|
||||
[ð](#lib:cin)
|
||||
|
||||
`istream cin;
|
||||
`
|
||||
|
||||
[1](#narrow.stream.objects-1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L545)
|
||||
|
||||
The object cin controls input from a stream buffer associated with the object stdin,
|
||||
declared in [<cstdio>](cstdio.syn#header:%3ccstdio%3e "31.13.1 Header <cstdio> synopsis [cstdio.syn]")[.](#narrow.stream.objects-1.sentence-1)
|
||||
|
||||
[2](#narrow.stream.objects-2)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L550)
|
||||
|
||||
After the objectcin is initialized,cin.tie() returns&cout[.](#narrow.stream.objects-2.sentence-1)
|
||||
|
||||
Its state is otherwise the same as required for[basic_ios<char>::init](istream.cons#lib:basic_ios,init "31.7.5.2.2 Constructors [istream.cons]")[.](#narrow.stream.objects-2.sentence-2)
|
||||
|
||||
[ð](#lib:cout)
|
||||
|
||||
`ostream cout;
|
||||
`
|
||||
|
||||
[3](#narrow.stream.objects-3)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L567)
|
||||
|
||||
The object cout controls output to a stream buffer associated with the object stdout,
|
||||
declared in [<cstdio>](cstdio.syn#header:%3ccstdio%3e "31.13.1 Header <cstdio> synopsis [cstdio.syn]")[.](#narrow.stream.objects-3.sentence-1)
|
||||
|
||||
[ð](#lib:cerr)
|
||||
|
||||
`ostream cerr;
|
||||
`
|
||||
|
||||
[4](#narrow.stream.objects-4)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L579)
|
||||
|
||||
The object cerr controls output to a stream buffer associated with the object stderr,
|
||||
declared in [<cstdio>](cstdio.syn#header:%3ccstdio%3e "31.13.1 Header <cstdio> synopsis [cstdio.syn]")[.](#narrow.stream.objects-4.sentence-1)
|
||||
|
||||
[5](#narrow.stream.objects-5)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L584)
|
||||
|
||||
After the objectcerr is initialized,cerr.flags() & unitbuf is nonzero and cerr.tie() returns &cout[.](#narrow.stream.objects-5.sentence-1)
|
||||
|
||||
Its state is otherwise the same as required for[basic_ios<char>::init](istream.cons#lib:basic_ios,init "31.7.5.2.2 Constructors [istream.cons]")[.](#narrow.stream.objects-5.sentence-2)
|
||||
|
||||
[ð](#lib:clog)
|
||||
|
||||
`ostream clog;
|
||||
`
|
||||
|
||||
[6](#narrow.stream.objects-6)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L600)
|
||||
|
||||
The object clog controls output to a stream buffer
|
||||
associated with the object stderr,
|
||||
declared in [<cstdio>](cstdio.syn#header:%3ccstdio%3e "31.13.1 Header <cstdio> synopsis [cstdio.syn]")[.](#narrow.stream.objects-6.sentence-1)
|
||||
|
||||
### [31.4.4](#wide.stream.objects) Wide stream objects [[wide.stream.objects]](wide.stream.objects)
|
||||
|
||||
[ð](#lib:wcin)
|
||||
|
||||
`wistream wcin;
|
||||
`
|
||||
|
||||
[1](#wide.stream.objects-1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L615)
|
||||
|
||||
The object wcin controls input from a stream buffer associated with the object stdin,
|
||||
declared in [<cstdio>](cstdio.syn#header:%3ccstdio%3e "31.13.1 Header <cstdio> synopsis [cstdio.syn]")[.](#wide.stream.objects-1.sentence-1)
|
||||
|
||||
[2](#wide.stream.objects-2)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L620)
|
||||
|
||||
After the objectwcin is initialized,wcin.tie() returns&wcout[.](#wide.stream.objects-2.sentence-1)
|
||||
|
||||
Its state is otherwise the same as required for[basic_ios<wchar_t>::init](istream.cons#lib:basic_ios,init "31.7.5.2.2 Constructors [istream.cons]")[.](#wide.stream.objects-2.sentence-2)
|
||||
|
||||
[ð](#lib:wcout)
|
||||
|
||||
`wostream wcout;
|
||||
`
|
||||
|
||||
[3](#wide.stream.objects-3)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L637)
|
||||
|
||||
The object wcout controls output to a stream buffer associated with the object stdout,
|
||||
declared in [<cstdio>](cstdio.syn#header:%3ccstdio%3e "31.13.1 Header <cstdio> synopsis [cstdio.syn]")[.](#wide.stream.objects-3.sentence-1)
|
||||
|
||||
[ð](#lib:wcerr)
|
||||
|
||||
`wostream wcerr;
|
||||
`
|
||||
|
||||
[4](#wide.stream.objects-4)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L649)
|
||||
|
||||
The object wcerr controls output to a stream buffer associated with the object stderr,
|
||||
declared in [<cstdio>](cstdio.syn#header:%3ccstdio%3e "31.13.1 Header <cstdio> synopsis [cstdio.syn]")[.](#wide.stream.objects-4.sentence-1)
|
||||
|
||||
[5](#wide.stream.objects-5)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L654)
|
||||
|
||||
After the objectwcerr is initialized,wcerr.flags() & unitbuf is nonzero and wcerr.tie() returns &wcout[.](#wide.stream.objects-5.sentence-1)
|
||||
|
||||
Its state is otherwise the same as required for[basic_ios<wchar_t>::init](istream.cons#lib:basic_ios,init "31.7.5.2.2 Constructors [istream.cons]")[.](#wide.stream.objects-5.sentence-2)
|
||||
|
||||
[ð](#lib:wclog)
|
||||
|
||||
`wostream wclog;
|
||||
`
|
||||
|
||||
[6](#wide.stream.objects-6)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L670)
|
||||
|
||||
The object wclog controls output to a stream buffer associated with the object stderr,
|
||||
declared in [<cstdio>](cstdio.syn#header:%3ccstdio%3e "31.13.1 Header <cstdio> synopsis [cstdio.syn]")[.](#wide.stream.objects-6.sentence-1)
|
||||
93
cppdraft/iostream/objects/overview.md
Normal file
93
cppdraft/iostream/objects/overview.md
Normal file
@@ -0,0 +1,93 @@
|
||||
[iostream.objects.overview]
|
||||
|
||||
# 31 Input/output library [[input.output]](./#input.output)
|
||||
|
||||
## 31.4 Standard iostream objects [[iostream.objects]](iostream.objects#overview)
|
||||
|
||||
### 31.4.2 Overview [iostream.objects.overview]
|
||||
|
||||
[1](#1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L468)
|
||||
|
||||
In this Clause, the type name FILE refers to
|
||||
the type FILE declared in [<cstdio>](cstdio.syn#header:%3ccstdio%3e "31.13.1 Header <cstdio> synopsis [cstdio.syn]")[.](#1.sentence-1)
|
||||
|
||||
[2](#2)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L472)
|
||||
|
||||
The header [<iostream>](iostream.syn#header:%3ciostream%3e "31.4.1 Header <iostream> synopsis [iostream.syn]") declares objects that associate objects with the
|
||||
standard C streams provided for by the functions declared in[<cstdio>](cstdio.syn#header:%3ccstdio%3e "31.13.1 Header <cstdio> synopsis [cstdio.syn]"), and includes all the headers necessary to use these objects[.](#2.sentence-1)
|
||||
|
||||
The dynamic types of the stream buffers
|
||||
initially associated with these objects are unspecified,
|
||||
but they have the behavior specified forstd::basic_filebuf<char> orstd::basic_filebuf<wchar_t>[.](#2.sentence-2)
|
||||
|
||||
[3](#3)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L484)
|
||||
|
||||
The objects are constructed and the associations are established at some
|
||||
time prior to or during the first time an object of classios_base::Init is constructed, and in any case before the body
|
||||
of main ([[basic.start.main]](basic.start.main "6.10.3.1 main function")) begins execution[.](#3.sentence-1)
|
||||
|
||||
The objects are not destroyed during program execution[.](#3.sentence-2)[258](#footnote-258 "Constructors and destructors for objects with static storage duration can access these objects to read input from stdin or write output to stdout or stderr.")
|
||||
|
||||
[4](#4)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L501)
|
||||
|
||||
*Recommended practice*: If it is possible for them to do so, implementations should
|
||||
initialize the objects earlier than required[.](#4.sentence-1)
|
||||
|
||||
[5](#5)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L506)
|
||||
|
||||
The results of including [<iostream>](iostream.syn#header:%3ciostream%3e "31.4.1 Header <iostream> synopsis [iostream.syn]") in a translation unit shall be as if[<iostream>](iostream.syn#header:%3ciostream%3e "31.4.1 Header <iostream> synopsis [iostream.syn]") defined an instance of ios_base::Init with static
|
||||
storage duration[.](#5.sentence-1)
|
||||
|
||||
Each C++ library module ([[std.modules]](std.modules "16.4.2.4 Modules")) in a hosted implementation
|
||||
shall behave as if it contains an interface unit that
|
||||
defines an unexported ios_base::Init variable with
|
||||
ordered initialization ([[basic.start.dynamic]](basic.start.dynamic "6.10.3.3 Dynamic initialization of non-block variables"))[.](#5.sentence-2)
|
||||
|
||||
[*Note [1](#note-1)*:
|
||||
|
||||
As a result, the definition of that variable is appearance-ordered before
|
||||
any declaration following the point of importation of a C++ library module[.](#5.sentence-3)
|
||||
|
||||
Whether such a definition exists is unobservable by a program that
|
||||
does not reference any of the standard iostream objects[.](#5.sentence-4)
|
||||
|
||||
â *end note*]
|
||||
|
||||
[6](#6)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L522)
|
||||
|
||||
Mixing operations on corresponding wide- and narrow-character streams
|
||||
follows the same semantics as mixing such operations onFILEs,
|
||||
as specified in the C standard library[.](#6.sentence-1)
|
||||
|
||||
[7](#7)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L528)
|
||||
|
||||
Concurrent access to a synchronized ([[ios.members.static]](ios.members.static "31.5.2.5 Static members")) standard iostream object's formatted and unformatted input ([[istream]](istream "31.7.5.2 Class template basic_istream")) and output ([[ostream]](ostream "31.7.6.2 Class template basic_ostream")) functions or a standard C stream by multiple threads does not result in a data race ([[intro.multithread]](intro.multithread "6.10.2 Multi-threaded executions and data races"))[.](#7.sentence-1)
|
||||
|
||||
[*Note [2](#note-2)*:
|
||||
|
||||
Unsynchronized concurrent use of these objects and streams by multiple threads
|
||||
can result in interleaved characters[.](#7.sentence-2)
|
||||
|
||||
â *end note*]
|
||||
|
||||
See also: ISO/IEC 9899:2024, 7.21.2
|
||||
|
||||
[258)](#footnote-258)[258)](#footnoteref-258)
|
||||
|
||||
Constructors and destructors for objects with
|
||||
static storage duration can
|
||||
access these objects to read input fromstdin or write output tostdout orstderr[.](#footnote-258.sentence-1)
|
||||
11
cppdraft/iostream/syn.md
Normal file
11
cppdraft/iostream/syn.md
Normal file
@@ -0,0 +1,11 @@
|
||||
[iostream.syn]
|
||||
|
||||
# 31 Input/output library [[input.output]](./#input.output)
|
||||
|
||||
## 31.4 Standard iostream objects [[iostream.objects]](iostream.objects#iostream.syn)
|
||||
|
||||
### 31.4.1 Header <iostream> synopsis [iostream.syn]
|
||||
|
||||
[ð](#header:%3ciostream%3e)
|
||||
|
||||
#include <ios> // see [[ios.syn]](ios.syn "31.5.1 Header <ios> synopsis")#include <streambuf> // see [[streambuf.syn]](streambuf.syn "31.6.1 Header <streambuf> synopsis")#include <istream> // see [[istream.syn]](istream.syn "31.7.1 Header <istream> synopsis")#include <ostream> // see [[ostream.syn]](ostream.syn "31.7.2 Header <ostream> synopsis")namespace std {extern istream cin; extern ostream cout; extern ostream cerr; extern ostream clog; extern wistream wcin; extern wostream wcout; extern wostream wcerr; extern wostream wclog;}
|
||||
Reference in New Issue
Block a user