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 International Standard
. Such conversions occur in the
following conditions:
passing a value to a function that takes an argument of type bool;
using operator== to compare to false or true;
returning a value from a function with a return type of bool;
initializing members of type bool via aggregate initialization;
initializing a
const bool& which would bind to a temporary
.
Rationale: More detailed error messages
. Effect on original feature:
std::ios_base::failure is no longer derived directly from
std::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 from
std::exception may execute differently in this International Standard
.[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 International Standard
. For example:
#include <iostream>
int main() {
int flag = std::ios_base::hex;
std::cout.setf(flag); }