This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.

### 2497. Use of `uncaught_exception()`

Section: 29.7.5.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 29.7.5.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, calls `os.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.

1. Modify 29.7.5.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) && !uncaught_exceptions() <= uncaught_ && os.good()` is `true`, calls `os.rdbuf()->pubsync()`. If that function returns `-1`, sets `badbit` in `os.rdstate()` without propagating an exception.