[diff.cpp03.input.output] (original) (raw)

Annex C (informative) Compatibility [diff]

C.6 C++ and ISO C++ 2003 [diff.cpp03]

C.6.16 [input.output]: input/output library [diff.cpp03.input.output]

Affected subclauses: [istream.sentry], [ostream.sentry], and [iostate.flags]

Change: Specify use of explicit in existing boolean conversion functions.

Rationale: Clarify intentions, avoid workarounds.

Effect on original feature: Valid C++ 2003 code that relies on implicit boolean conversions will fail to compile with this revision of C++.

Such conversions occur in the following conditions:

Affected subclause: [ios.failure]

Change: Change base class of std​::​ios_base​::​failure.

Rationale: More detailed error messages.

Effect on original feature: std​::​ios_base​::​failure is no longer derived directly fromstd​::​exception, but is now derived from std​::​system_error, which in turn is derived from std​::​runtime_error.

Valid C++ 2003 code that assumes that std​::​ios_base​::​failure is derived directly fromstd​::​exception may execute differently in this revision of C++.

Affected subclause: [ios.base]

Change: Flag types in std​::​ios_base are now bitmasks with values defined as constexpr static members.

Rationale: Required for new features.

Effect on original feature: Valid C++ 2003 code that relies on std​::​ios_base flag types being represented as std​::​bitset or as an integer type may fail to compile with this revision of C++.

[Example 1: #include <iostream> int main() { int flag = std::ios_base::hex; std::cout.setf(flag); } — _end example_]