<html><head><title>Appendix C: ISO C++ 2003 Compatibility, Revision 1</title><style type="text/css">ol{margin:0;padding:0}p{margin:0}.c3{color:#000099;font-size:11pt;text-decoration:underline;font-family:Arial}.c5{color:#000000;font-size:24pt;font-family:Arial}.c0{color:#000000;font-size:11pt;font-family:Arial}.c6{color:#000000;font-size:14pt;font-family:Arial}.c4{color:#000000;font-size:11pt;font-family:Courier New}.c1{line-height:1.15;text-indent:0pt;direction:ltr}.c2{font-weight:bold}.c7{background-color:#ffffff}</style></head><body class="c7"><p class="c1"><span class="c6 c2">Appendix C: ISO C++ 2003 Compatibility, Revision 1</span></p><p class="c1"><span class="c5 c2">&nbsp;</span></p><p class="c1"><span class="c0">ISO/IEC JTC1 SC22 WG21 N3186 = 10-0176 - 2010-11-26</span></p><p class="c1"><span class="c0">Benjamin Kosnik, </span><span class="c3"><a href="mailto:bkoz@redhat.com">bkoz@redhat.com</a></span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0 c2">Addresses</span><span class="c6 c2">: </span><span class="c0">UK 6</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c6 c2">Introduction</span></p><p class="c1"><span class="c0 c2">&nbsp;</span></p><p class="c1"><span class="c0">This paper details compatibility of C++ 2003 code, as compiled by this latest version of the C++ standard. It is based on ISO C++ draft N3126, and is a successor to N2733, Appendix C: ISO C++ 2003 Compatibility.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c6 c2">Proposed wording</span></p><p class="c1"><span class="c0 c2">&nbsp;</span></p><p class="c1"><span class="c0">Add a new section to Appendix C with the following contents.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">C.2 C++ and ISO C++2003 [diff.iso.c++03]</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">The following subclauses list the differences between this version of C++ and the previous version of ISO C++ (ISO/IEC 14882:2003 Programming Languages - C++), by the chapters of this document.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">C.2.1 Clause 2 lexical conventions</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">2.11</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> New Keywords</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> Required for new features.</span></p><p class="c1"><span class="c0 c2">Effect on original feature:</span><span class="c0"> Added to Table 3, the following identifiers are new keywords:alignof, char16_t, char32_t, constexpr, decltype, &nbsp;noexcept, nullptr, static_assert, static_cast, and thread_local. Valid C++03 code using these identifiers is invalid in C++0x.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">C.2.2 Clause 12 special member functions</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">12.4</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> Destructors default to noexcept(true)</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> Clarification of design with respect to unexpected termination.</span></p><p class="c1"><span class="c0 c2">Effect on original feature:</span><span class="c0"> Valid C++03 code may execute differently in C++0x.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">C.2.3 Clause 14 templates</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">14.1</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> Remove export.</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> No implementation consensus.</span></p><p class="c1"><span class="c0 c2">Effect on original feature:</span><span class="c0"> A valid C++03 expression containing export is ill-formed in C++0x.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">14.3</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> Remove whitespace requirement for nested closing template right angle brackets</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> Considered a persistent, but minor, annoyance. Template aliases representing nonclass types would exacerbate whitespace issues.</span></p><p class="c1"><span class="c0 c2">Effect on original feature:</span><span class="c0"> Change to semantics of well-defined expression. A valid C++03 expression containing a right angle bracket (&#39;&gt;&#39;) followed immediately by another right angle bracket may now be treated as closing two templates.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">For example:</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">The following code is valid in C++03 (because &quot;</span><span class="c4">&gt;&gt;</span><span class="c0">&quot; is a right-shift operator) but invalid in C++0x (because the &quot;</span><span class="c4">&gt;&gt;</span><span class="c0">&quot; closes two templates:</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp;template&lt;typename T&gt; struct X { };</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp;template&lt;int N&gt; struct Y { };</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp;X&lt; Y&lt; 1 &gt;&gt; 2 &gt; &gt; x;</span></p><p class="c1"><span class="c4">&nbsp;</span></p><p class="c1"><span class="c4">&nbsp;</span></p><p class="c1"><span class="c0">C.2.4 Clause 17 library introduction</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">17.6.1.2</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> New includes.</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> New functionality.</span></p><p class="c1"><span class="c0 c2">Effect on original feature:</span><span class="c0"> The following C++ include files are new: array, atomic, chrono, codecvt, condition_variable, forward_list, future, initializer_list, mutex, random, ratio, regex, scoped_allocator, sytem_error, thread, tuple, typeindex, and type_traits. In addition, the following C compatibility include files are new: ccomplex, cfenv, cinttypes, cstdbool, cstdint, ctgmath, and cuchar. Valid C++03 code that includes files with these names may be invalid in C++0x.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">17.6.3.2.2</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> New reserved namespace.</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> New functionality.</span></p><p class="c1"><span class="c0 c2">Effect on original feature:</span><span class="c0"> The global namespace posix is now reserved for standardization. Valid C++03 code that used a top-level posix namespace may be invalid in C++0x.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">C.2.5 Clause 18 library support</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">18.7</span></p><p class="c1"><span class="c0">18.8</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> New reserved identifiers.</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> Required by new features.</span></p><p class="c1"><span class="c0 c2">Effect on original feature: </span><span class="c0">Valid C++03 code that uses these identifiers may be invalid in C++0x.</span></p><p class="c1"><span class="c0">New identifiers, by include file:</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;exception&gt;</span></p><p class="c1"><span class="c0">nested_exception, exception_ptr, current_exception, rethrow_exception, make_exception_ptr, throw_with_nested, and rethrow_if_nested.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;initializer_list&gt;</span></p><p class="c1"><span class="c0">initializer_list</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">18.6.1.1</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> Linking new/delete operators.</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> Two throwing single-object signatures form base for other operators, clarifies that replacing these two changes others. Tighter requirements increase portability.</span></p><p class="c1"><span class="c0 c2">Effect on original feature:</span><span class="c0"> Valid C++03 code that replaces global new/delete operators may execute differently in C++0x.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">For example:</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp;#include &lt;cstdio&gt;</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp;#include &lt;cstdlib&gt;</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp;#include &lt;new&gt;</span></p><p class="c1"><span class="c4">&nbsp;</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp;void* operator new(std::size_t size) throw(std::bad_alloc)</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp;{</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp; &nbsp; std::printf(&quot;custom allocation\n&quot;);</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp; &nbsp; if (size == 0)</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; size = 1;</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp; &nbsp; void*p = std::malloc(size);</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp; &nbsp; if (p == 0)</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw std::bad_alloc();</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp; &nbsp; return p;</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp;}</span></p><p class="c1"><span class="c4">&nbsp;</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp;void &nbsp;operator delete(void* ptr) throw()</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp;{</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp; &nbsp; std::printf(&quot;custom deallocation\n&quot;);</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp; &nbsp; std::free(ptr);</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp;}</span></p><p class="c1"><span class="c4">&nbsp;</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp;int main()</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp;{</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp; &nbsp; int* i = new int;</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp; &nbsp; delete i;</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp; &nbsp; int* a = new int[3];</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp; &nbsp; delete [] a;</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp;}</span></p><p class="c1"><span class="c4">&nbsp;</span></p><p class="c1"><span class="c0">C.2.6 Clause 19 diagnostics</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">19.5</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> New reserved identifiers.</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> Required by new features.</span></p><p class="c1"><span class="c0 c2">Effect on original feature: </span><span class="c0">Valid C++03 code that uses these identifiers may be invalid in C++0x. New identifiers, by include file:</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;system_error&gt;</span></p><p class="c1"><span class="c0">error_category, error_code, error_condition, errc, system_error, is_error_code_enum, is_error_condition_enum, make_error_code, and make_error_condition.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">19.4</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> Thread-local error numbers.</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> Support new thread facilities.</span></p><p class="c1"><span class="c0 c2">Effect on original feature: </span><span class="c0">Valid but implementation-defined C++-03 code that relies on errno being the same across threads may change behavior in C++-0x.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">C.2.7 Clause 20 utilities</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">20.1</span></p><p class="c1"><span class="c0">20.3</span></p><p class="c1"><span class="c0">20.4</span></p><p class="c1"><span class="c0">20.5</span></p><p class="c1"><span class="c0">20.7</span></p><p class="c1"><span class="c0">20.8</span></p><p class="c1"><span class="c0">20.9</span></p><p class="c1"><span class="c0">20.10</span></p><p class="c1"><span class="c0">20.11</span></p><p class="c1"><span class="c0">20.13</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> New reserved identifiers.</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> Required by new features.</span></p><p class="c1"><span class="c0 c2">Effect on original feature: </span><span class="c0">Valid C++03 code that uses these identifiers may be invalid in C++0x. New identifiers, by include file:</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;chrono&gt;</span></p><p class="c1"><span class="c0">chrono, duration, duration_cast, time_point, time_point_cast, system_clock, monotonic_clock, high_resolution_clock</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;memory&gt;</span></p><p class="c1"><span class="c0">pointer_traits, allocator_traits, allocator_arg, uses_allocator, is_scoped_allocator, constructible_with_allocator_suffix, constructible_with_allocator_prefix, allocator_propagate_never, allocator_propagate_on_copy_construction, allocator_propagate_on_move_assignment, allocator_propagate_on_copy_assignment, allocator_propagation_map, scoped_allocator_adaptor, construct_element, default_delete, unique_ptr, bad_weak_ptr, shared_ptr, static_pointer_cast, dynamic_pointer_cast, const_pointer_cast, get_deleter, weak_ptr, enable_shared_from_this, pointer_safety, declare_reachable, undeclare_reachable, declare_no_pointers, undeclare_no_pointers, get_pointer_safety, align</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;ratio&gt;</span></p><p class="c1"><span class="c0">ratio, ratio_add, ratio_subtract, ratio_multiply, ratio_divide, ratio_equal, ratio_not_equal, ratio_less, ratio_less_equal, ratio_greater, ratio_greater_equal, yocto, zepto, atto, femto, pico, nano, micro, milli, centi, deci, deca, hecto, kilo, mega, giga, tera, peta, exa, zetta, and yotta.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;tuple&gt;</span></p><p class="c1"><span class="c0">tuple, uses_allocator, ignore, make_tuple, forward_as_tuple, tie, tuple_cat, tuple_size, tuple_element, get</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;type_traits&gt;</span></p><p class="c1"><span class="c0">integral_constant, true_type, false_type, is_void, is_integral, is_floating_point, is_array, is_pointer, is_lvalue_reference, is_rvalue_reference, is_member_object_pointer, is_member_function_pointer, is_enum, is_union, is_class, is_function, is_reference, is_arithmetic, is_fundamental, is_member_pointer, is_scalar, is_object, is_compound, is_const, is_volatile, is_trivial, is_standard_layout, is_pod, is_empty, is_polymorphic, is_abstract, remove_const, remove_volatile, remove_cv, add_const, add_volatile, add_cv, remove_reference, add_reference, remove_pointer, add_pointer, is_signed, is_unsigned, rank, extent, remove_extent, remove_all_extents, has_trivial_default_contructor, has_trivial_copy_constructor, has_trivial_assign, has_trivial_destructor, has_nothrow_default_constructor, has_nothrow_copy_constructor, has_nothrow_assign, has_virtual_destructor, is_same, is_base_of, is_convertible, &nbsp;aligned_storage, aligned_union, decay, enable_if, conditional, common_type</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">C.2.8 Clause 21 strings</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">21.2</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> New reserved identifiers.</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> Required by new features.</span></p><p class="c1"><span class="c0 c2">Effect on original feature: </span><span class="c0">Valid C++03 code that uses these identifiers may be invalid in C++0x. New identifiers, by include file:</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;string&gt;</span></p><p class="c1"><span class="c0">u16string, u32string, stoi, stol, stoul, stoll, stoull, stof, stod, stold, to_string, to_wstring</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">21.3 </span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> Change basic_string requirements to disallow reference counted strings.</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> Invalidation subtly different between reference-counted strings and other implementation strategies. Regularize behavior for new C++0x features.</span></p><p class="c1"><span class="c0 c2">Effect on original feature:</span><span class="c0"> C++03 code may execute differently in C++0x.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">C.2.9 Clause 23 containers</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">23.2</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> Specify size() complexity to be constant.</span></p><p class="c1"><span class="c0 c2">Rationale: </span><span class="c0">Lack of size() specification results in divergent implementations with inconsistent performance characteristics.</span></p><p class="c1"><span class="c0 c2">Effect on original feature:</span><span class="c0"> Some container implementations in C++03 may not conform to the specified size() requirements in C++0x. Adjusting containers (such as list) to the stricter requirements may require incompatible changes.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">23.2</span></p><p class="c1"><span class="c0">23.4</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> New reserved identifiers.</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> Required by new features.</span></p><p class="c1"><span class="c0 c2">Effect on original feature: </span><span class="c0">Valid C++03 code that uses these identifiers may be invalid in C++0x. New identifiers, by include file:</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;array&gt;</span></p><p class="c1"><span class="c0">array</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;forward_list&gt;</span></p><p class="c1"><span class="c0">forward_list</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;unordered_map&gt;</span></p><p class="c1"><span class="c0">unordered_map, unordered_multimap</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;unordered_set&gt;</span></p><p class="c1"><span class="c0">unordered_set, unordered_multiset</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">C.2.10 Clause 25 algorithms</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">25</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> New reserved identifiers.</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> Required by new features.</span></p><p class="c1"><span class="c0 c2">Effect on original feature: </span><span class="c0">Valid C++03 code that uses these identifiers may be invalid in C++0x. New identifiers, by include file:</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;algorithm&gt;</span></p><p class="c1"><span class="c0">all_of, any_of, none_of, find_if_not, copy_n, copy_if, partition_copy, partition_point</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">C.2.11 Clause 26 numerics</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">26.4.2</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> New reserved identifiers.</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> Required by new features.</span></p><p class="c1"><span class="c0 c2">Effect on original feature: </span><span class="c0">Valid C++03 code that uses these identifiers may be invalid in C++0x. New identifiers, by include file:</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;random&gt;</span></p><p class="c1"><span class="c0">linear_congruential_engine, mersenne_twister_engine, subtract_with_carry_engine, discard_block_engine, independent_bits_engine, shuffle_order_engine, minstd_rand0, minstd_rand, mt19937, ranlux24_base, ranlux48_bse, ranlux24, ranlux48, knuth_b, default_random_engine, random_device, seed_seq, generate_cannonical, uniform_int_distribution, uniform_real_distribution, bernoulli_distribution, binomial_distribution, geometric_distribution, negative_binomial_distribution, poisson_distribution, exponential_distribution, gamma_distribution, weibull_distribution, extreme_value_distribution, normal_distribution, lognormal_distribution, chi_squared_distribution, cauchy_distribution, fisher_f_distribution, student_t_distribution, discrete_distribution, piecewise_constant_distribution, general_pdf_distribution</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">C.2.12 Clause 27 io</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">27.3 </span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> Specify behavior for concurrent access to standard streams.</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> Standardizing existing behavior.</span></p><p class="c1"><span class="c0 c2">Effect on original feature:</span><span class="c0"> Define race-free concurrent access for synchronized streams. C++03 code may execute differently in C++0x.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">27.4.2</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> Change base class of ios_base::failure.</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> Detailed error messages.</span></p><p class="c1"><span class="c0 c2">Effect on original feature:</span><span class="c0"> Define ios_base::failure base class as system_error. C++03 code may execute differently in C++0x.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">27.5.2</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> Change ios_base:: types from enumerations to formalized bitmasks represented as constexpr member data.</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> All bitmask types should be defined as enumerations with mask operators implemented as constexpr functions.</span></p><p class="c1"><span class="c0 c2">Effect on original feature:</span><span class="c0"> Define ios_base::fmtflags, ios_base::iostate, ios_base::openmode, ios_base::seekdir as formalized bitmask types.</span></p><p class="c1"><span class="c0">Some code that depended on the implementation properties of these types being std::bitset or a builtin integer type may no longer compile.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">For example:</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0"> </span><span class="c4"> &nbsp; #include &lt;iostream&gt;</span></p><p class="c1"><span class="c4"> &nbsp; &nbsp;std::cout.setf(17); // should be std::cout.setf(hex);</span></p><p class="c1"><span class="c4">&nbsp;</span></p><p class="c1"><span class="c4">&nbsp;</span></p><p class="c1"><span class="c0">C.2.13 Clause 28 regex</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">28.4</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> New reserved identifiers.</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> Required by new features.</span></p><p class="c1"><span class="c0 c2">Effect on original feature: </span><span class="c0">Valid C++03 code that uses these identifiers may be invalid in C++0x. New identifiers, by include file:</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;regex&gt;</span></p><p class="c1"><span class="c0">regex_constants, regex_error, regex_traits, basic_regex, regex, wregex, sub_match, csub_match, wcsub_match, ssub_match, wssub_match, match_results, cmatch, wcmatch, smatch, wsmatch, regex_match, regex_search, regex_replace, regex_iterator, cregex_iterator, wcregex_iterator, sregex_iterator, wsregex_iterator, regex_token_iterator, cregex_token_iterator, wcregex_token_iterator, sregex_token_iterator, wsregex_token_iterator.</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">C.2.14 Clause 29 atomics</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">29.0</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> New reserved identifiers.</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> Required by new features.</span></p><p class="c1"><span class="c0 c2">Effect on original feature: </span><span class="c0">Valid C++03 code that uses these identifiers may be invalid in C++0x. New identifiers, by include file:</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;atomic&gt;</span></p><p class="c1"><span class="c0">memory_order, kill_dependency, atomic_flag, atomic, atomic_bool, atomic_char, atomic_schar, atomic_uchar, atomic_short, atomic_ushort, atomic_int, atomic_uint, atomic_long, atomic_ulong, atomic_llong, atomic_ullong, atomic_wchar_t, atomic_char16_t, atomic_char32_t</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">C.2.15 Clause 30 threads</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">30.3</span></p><p class="c1"><span class="c0">30.4</span></p><p class="c1"><span class="c0">30.5</span></p><p class="c1"><span class="c0 c2">Change:</span><span class="c0"> New reserved identifiers.</span></p><p class="c1"><span class="c0 c2">Rationale:</span><span class="c0"> Required by new features.</span></p><p class="c1"><span class="c0 c2">Effect on original feature: </span><span class="c0">Valid C++03 code that uses these identifiers may be invalid in C++0x. New identifiers, by include file:</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;thread&gt;</span></p><p class="c1"><span class="c0">thread, this_thread</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;mutex&gt;</span></p><p class="c1"><span class="c0">mutex, recursive_mutex, timed_mutex, recursive_timed_mutex, defer_lock_t, try_to_lock_t, adopt_lock_t, defer_lock, try_to_lock, adopt_lock, try_lock, lock, once_flag, call_once, lock_guard, unique_lock</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&lt;condition_variable&gt;</span></p><p class="c1"><span class="c0">condition_variable, condition_variable_any, cv_status, notify_all_at_thread_exit</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c0">&nbsp;</span></p><p class="c1"><span class="c2 c6">References</span></p><p class="c1"><span class="c0 c2">&nbsp;</span></p><p class="c1"><span class="c3"><a href="http://www.google.com/url?q=http%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2007%2Fn2270.html&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNH_hFH7tNDIRHlm2jb3QjrU6dPbqA">N2270</a></span><span class="c0"> Incompatible Changes in C++0x</span></p><p class="c1"><span class="c3"><a href="http://www.google.com/url?q=http%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2008%2Fn2733.html&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNFfiNoNepIdN2nVYKmXTiSkeRajuQ">N2733</a></span><span class="c0"> Appendix C: ISO C++ 2003 Compatibility</span></p><p class="c1"><span class="c0">N3126 Draft Programing Languages - C++, Pete Becker</span></p><p class="c1"><span class="c3"><a href="http://www.google.com/url?q=http%3A%2F%2Fwiki.dinkumware.com%2Ftwiki%2Fpub%2FWg21batavia%2FFormalMotions%2Fn3204.html&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNHuZmLXyO22AhscbA8It3kGP-PkHQ">N3204</a></span><span class="c0"> Deducing &#39;noexcept&#39; for destructors</span></p><p class="c1"><span class="c3"><a href="http://www.google.com/url?q=http%3A%2F%2Fwiki.dinkumware.com%2Ftwiki%2Fpub%2FWg21batavia%2FFormalMotions%2Fn3205.html&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNGs6Jo_uWTAGRx3KUAU7NscH_hOOw">N3205</a></span><span class="c0"> Delete operators default to noexcept</span></p><p class="c1"><span class="c3"><a href="http://www.google.com/url?q=http%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2010%2Fn3110.html&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNFqyeVt0NATsUWmmefYq4KHObnj2w">N3110</a></span><span class="c0"> Problems with bitmask types in the library</span></p><p class="c1"><span class="c3"><a href="http://www.google.com/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CBUQFjAA&amp;url=http%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2010%2Fn3064.pdf&amp;rct=j&amp;q=N3064&amp;ei=-1PwTPfPL5CCsQPR1pi3Cw&amp;usg=AFQjCNG7cXt0b5lxGO8N1wuqRpbD3kyPTA&amp;sig2=2LO5EAOWUikiwbTVzQyy0A&amp;cad=rja">N3064</a></span><span class="c0"> Core issue 374: Explicit specialization outside a template&#39;s parent (revision 1)</span></p><p class="c1"><span class="c3"><a href="http://www.google.com/url?q=http%3A%2F%2Fwiki.dinkumware.com%2Ftwiki%2Fpub%2FWg21pittsburgh%2FFormalMotions%2Fn3065.html&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNHEXXo3X9rqtfEjIIcr4hbLx8FQzQ">N3065</a></span><span class="c0"> Removing Export</span></p><p class="c1"><span class="c3"><a href="http://www.google.com/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CBMQFjAA&amp;url=http%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2010%2Fn3068.pdf&amp;rct=j&amp;q=N3068&amp;ei=OVTwTPjgKJKWsgPdwMy3Cw&amp;usg=AFQjCNF_BubBnAv8-HcKncAqOpX750yUfA&amp;sig2=m8fmtXXQAYemZ25_Gq1xDw&amp;cad=rja">N3068</a></span><span class="c0"> Equality Comparison for Unordered Containers (Rev 2)</span></p><p class="c1"><span class="c3"><a href="http://www.google.com/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CBMQFjAA&amp;url=http%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2009%2Fn2923.pdf&amp;rct=j&amp;q=N2923%20wg21&amp;ei=ZlTwTILyDJP0swO6uoDlCw&amp;usg=AFQjCNGXqOnYef0V6Q3srQRd6Nj7w8vIJg&amp;sig2=-TfcFKVcDk_rXBubNUUezg&amp;cad=rja">N2923</a></span><span class="c0"> Specifying the complexity of size() (Revision 1)</span></p><p class="c1"><span class="c3"><a href="http://www.google.com/url?q=http%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2008%2Fn2760.htm&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNGZqWainiKr5fAczSltSg8_OGuLWA">N2760</a></span><span class="c0"> Input/Output Library Thread Safety</span></p><p class="c1"><span class="c3"><a href="http://www.google.com/url?q=http%3A%2F%2Fwww.open-std.org%2FJTC1%2FSC22%2FWG21%2Fdocs%2Fpapers%2F2008%2Fn2769.htm&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNHx-5mt-w37O-rvfbObN8Zc7tHpIQ">N2769</a></span><span class="c0"> Detailed Reporting for Input/Output Library Errors (Revision 2)</span></p><p class="c1"><span class="c3"><a href="http://www.google.com/url?q=http%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2008%2Fn2668.htm&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNF5-vMlCIRCvdadX3W60ws2ec5aHg">N2668</a></span><span class="c0"> Concurrency Modifications to Basic String </span></p><p class="c1"><span class="c3"><a href="http://www.google.com/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CBMQFjAA&amp;url=http%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg21%2Fdocs%2Fpapers%2F2008%2Fn2680.pdf&amp;rct=j&amp;q=N2680%20wg21&amp;ei=dhzwTIHCDJKqsAPDq7HOCw&amp;usg=AFQjCNH_onxDO3w4fxZ6x0cdjei6dJHS2Q&amp;sig2=IPHp5YbiDchLHHmCEVynsA&amp;cad=rja">N2680</a></span><span class="c0"> Proposed Wording for Placement Insert (Revision 1)</span></p><p class="c1"><span class="c0">&nbsp;</span></p></body></html>