Section: 31.5.2.2.6 [ios.init] Status: C++17 Submitter: Richard Smith Opened: 2016-08-13 Last modified: 2021-06-06
Priority: 0
View all other issues in [ios.init].
View all issues with C++17 status.
Discussion:
1123 fixed a bug where users of <iostream>
were not guaranteed to have their streams flushed
on program shutdown. However, it also added this rule:
"Similarly, the entire program shall behave as if there were at least one instance of
ios_base::Init
with static lifetime."
This seems pointless: it only affects the behavior of programs that never include <iostream>
(because programs
that do include it are already guaranteed at least one such instance), and those programs do not need an implicit flush
because they cannot have written to the relevant streams.
[2016-09-09 Issues Resolution Telecon]
P0; move to Tentatively Ready
Proposed resolution:
This wording is relative to N4606.
Modify [ios::Init] p3 as indicated:
-3- The objects are constructed and the associations are established at some time prior to or during the first time an object of class
ios_base::Init
is constructed, and in any case before the body ofmain
begins execution.(footnote 293) The objects are not destroyed during program execution.(footnote 294) The results of including<iostream>
in a translation unit shall be as if<iostream>
defined an instance ofios_base::Init
with static storage duration.Similarly, the entire program shall behave as if there were at least one instance ofios_base::Init
with static storage duration.