uncaught_exception()
Section: 31.7.6.2.4 [ostream.sentry] Status: New Submitter: Roger Orr Opened: 2015-05-08 Last modified: 2020-09-06
Priority: 3
View all other issues in [ostream.sentry].
View all issues with New status.
Discussion:
In the current 31.7.6.2.4 [ostream.sentry], p4 refers to the now deprecated std::uncaught_exception()
:
D.9 [depr.uncaught].
If
((os.flags() & ios_base::unitbuf) && !uncaught_exception() && os.good())
is true, callsos.rdbuf()->pubsync()
.
This needs to be changed, for example to use std::uncaught_exceptions()
and to capture the value on entry and
compare with the saved value on exit.
[2015-06, Telecon]
JW: I already added an 's' here to make it use the new function, but that doesn't resolve Roger's suggestion to capture the value on entry and check it.
[2019-03-21; Daniel comments and provides wording]
The wording below implements Roger's suggestion.
Proposed resolution:
This wording is relative to N4810.
Modify 31.7.6.2.4 [ostream.sentry], class basic_ostream::sentry
synopsis, as indicated:
namespace std { template<class charT, class traits = char_traits<charT>> class basic_ostream<charT, traits>::sentry { bool ok_; // exposition only int uncaught_ = uncaught_exceptions(); // exposition only public: explicit sentry(basic_ostream<charT, traits>& os); ~sentry(); explicit operator bool() const { return ok_; } sentry(const sentry&) = delete; sentry& operator=(const sentry&) = delete; }; }[…]
~sentry();-4- If
(os.flags() & ios_base::unitbuf) &&
is!uncaught_exceptions() <= uncaught_ && os.good()true
, callsos.rdbuf()->pubsync()
. If that function returns-1
, setsbadbit
inos.rdstate()
without propagating an exception.