# C++ 200x

ISO C++
200x

This table is based on the table of contents of ISO/IEC JTC1 SC22 WG21 Doc No: N3092 Date: 2010-03-26 Final Committee Draft, Standard for Programming Language C++

In this implementation `-std=gnu++0x` or `-std=c++0x` flags must be used to enable language and library features. See dialect options. The pre-defined symbol `__GXX_EXPERIMENTAL_CXX0X__` is used to check for the presence of the required flag.

This page describes the C++0x support in mainline GCC SVN, not in any particular release.

## C++ 200x Implementation Status

Section | Description | Status | Comments
--- | --- | --- | ---
18 | Language support
18.1 | General | Y |
18.2 | Types | Partial | Missing offsetof, max_align_t
18.3 | Implementation properties |  |
18.3.1 | Numeric Limits |  |
18.3.1.1 | Class template `numeric_limits` | Y |
18.3.1.2 | `numeric_limits` members | Y |
18.3.1.3 | `float_round_style` | N |
18.3.1.4 | `float_denorm_style` | N |
18.3.1.5 | `numeric_limits` specializations | Y |
18.3.2 | C Library | Y |
18.4 | Integer types |  |
18.4.1 | Header `<cstdint>` synopsis | Y |
18.5 | Start and termination | Partial | C library dependency for quick_exit, at_quick_exit
18.6 | Dynamic memory management | Y |
18.7 | Type identification |  |
18.7.1 | Class type_info | Y |
18.7.2 | Class bad_cast | Y |
18.7.3 | Class bad_typeid | Y |
18.8 | Exception handling |  |
18.8.1 | Class exception | Y |
18.8.2 | Violating exception-specifications | Y |
18.8.3 | Abnormal termination | Y |
18.8.4 | `uncaught_exception` | Y |
18.8.5 | Exception Propagation | Y |
18.8.6 | `nested_exception` | Y |
18.9 | Initializer lists |  |
18.9.1 | Initializer list constructors | Y |
18.9.2 | Initializer list access | Y |
18.9.3 | Initializer list range access | N |
18.10 | Other runtime support | Y |
19 | Diagnostics
19.1 | General | Y |
19.2 | Exception classes | Y |
19.3 | Assertions | Y |
19.4 | Error numbers | Y |
19.5 | System error support |  |
19.5.1 | Class `error_category` | Y |
19.5.2 | Class `error_code` | Y |
19.5.3 | Class `error_condition` | Y |
19.5.4 | Comparison operators | Y |
19.5.5 | Class `system_error` | Y |
20 | General utilities
20.1 | General |  |
20.2 | Requirements |  |
20.3 | Utility components |  |
20.3.1 | Operators | Y |
20.3.2 | Swap | Y |
20.3.3 | `forward` and `move` helpers | Y |
20.3.4 | Function template `declval` | Y |
20.3.5 | Pairs |  |
20.3.5.1 | In general |  |
20.3.5.2 | Class template `pair` | Y |
20.3.5.3 | Tuple-like access to `pair` | Y |
20.3.5.5 | Piecewise construction | Y |
20.4 | Tuples |  |
20.4.1 | In general |  |
20.4.2 | Class template `tuple` | Y |
20.5 | Class template `bitset` | Y |
20.6 | Compile-time rational arithmetic |  |
20.6.1 | Class template `ratio` | Y |
20.6.2 | Arithmetic on `ratio` types | Y |
20.6.3 | Comparison of `ratio` types | Y |
20.6.4 | SI types for `ratio` | Y |
20.7 | Metaprogramming and type traits |  |
20.7.1 | Requirements | Y |
20.7.2 | Header `<type_traits>` synopsis |  |
20.7.3 | Helper classes | Y |
20.7.4 | Unary Type Traits | Y |
20.7.4.1 | Primary type categories | Y |
20.7.4.2 | Composite type traits | Y |
20.7.4.3 | Type properties | Partial | Missing is_trivially_copyable, is_nothrow_constructible
20.7.5 | Relationships between types | Y |
20.7.6 | Transformations between types | Partial | Missing underlying_type
20.7.6.1 | Const-volatile modifications | Y |
20.7.6.2 | Reference modifications | Y |
20.7.6.3 | Sign modifications | Y |
20.7.6.4 | Array modifications | Y |
20.7.6.5 | Pointer modifications | Y |
20.7.6.6 | Other transformations | Y |
20.8 | Function objects |  |
20.8.1 | Definitions | Y |
20.8.2 | Requirements | Y |
20.8.3 | Base | Y |
20.8.4 | Class template `reference_wrapper` | Y |
20.8.5 | Arithmetic operation | Y |
20.8.6 | Comparisons | Y |
20.8.7 | Logical operations | Y |
20.8.8 | Bitwise operations | Y |
20.8.9 | Negators | Y |
20.8.10 | Function template `bind` | Y |
20.8.11 | Adaptors for pointers to functions | Y |
20.8.12 | Adaptors for pointers to members | Y |
20.8.13 | Function template `mem_fn` | Partial | Missing overloads for reference-qualified member functions
20.8.14 | Polymorphic function wrappers |  |
20.8.14.1 | Class `bad_function_call` | Y |
20.8.14.2 | Class template `function` | Partial | Missing allocator support
20.8.15 | Class template `hash` | Y |
20.9 | Memory |  |
20.9.1 | Allocator argument tag | Y |
20.9.2 | `uses_allocator` | Y |
20.9.3 | Pointer traits | N |
20.9.4 | Allocator traits | N |
20.9.5 | The default allocator | Y |
20.9.6 | Scoped allocator adaptor |  |
20.9.6.1 | Scoped allocator adaptor member types | N |
20.9.6.2 | Scoped allocator adaptor constructors | N |
20.9.6.3 | Scoped allocator adaptor members | N |
20.9.7 | Raw storage iterator | Y |
20.9.8 | Temporary buffers | Y |
20.9.9 | Specialized algorithms |  |
20.9.9.1 | `addressof` | Y |
20.9.9.2 | `uninitialized_copy` | Y |
20.9.9.3 | `uninitialized_fill` | Y |
20.9.9.4 | `uninitialized_fill_n` | Y |
20.9.10 | Class template `unique_ptr` | Y |
20.9.11 | Smart pointers |  |
20.9.11.1 | Class `bad_weak_ptr` | Y |
20.9.11.2 | Class template `shared_ptr` | Y | Uses code from boost::shared_ptr.
20.9.11.3 | Class template `weak_ptr` | Y |
20.9.11.4 | Class template `emable_shared_from_this` | Y |
20.9.11.5 | `shared_ptr` atomic access | Partial |
20.9.11.6 | Hash support | Y |
20.9.12 | Pointer safety | Partial |
20.9.13 | Align | N |
20.9.16 | C library | Y |
20.10 | Time utilities |  |
20.10.1 | Clock requirements | Y |
20.10.2 | Time-related traits |  |
20.10.2.1 | `treat_as_floating_point` | Y |
20.10.2.2 | `duration_values` | Y |
20.10.2.3 | Specializations of `common_type` | Y |
20.10.3 | Class template `duration` | Y |
20.10.4 | Class template `time_point` | Y |
20.10.5 | Clocks |  |
20.10.5.1 | Class `system_clock` | Y |
20.10.5.2 | Class `monotonic_clock` | Y |
20.10.5.3 | Class `high_resolution_clock` | Y |
20.11 | Date and time functions | Y |
20.12 | Class `type_index` | N |
21 | Strings
21.1 | General | Y |
21.2 | Character traits |  |
21.2.1 | Character traits requirements | Y |
21.2.2 | traits typedefs | Y |
21.2.3 | `char_traits` specializations |  |
21.2.3.1 | struct `char_traits<char>` | Partial | Missing constexpr
21.2.3.2 | struct `char_traits<char16_t>` | Partial | Missing constexpr
21.2.3.3 | struct `char_traits<char32_t>` | Y |
21.2.3.4 | struct `char_traits<wchar_t>` | Y |
21.3 | String classes | Y |
21.4 | Class template `basic_string` | Y |
21.5 | Numeric Conversions | Y |
21.6 | Hash support | Y |
21.7 | Null-terminated sequence utilities | Y | C library dependency
22 | Localization
22.1 | General | Y |
22.2 | Header `<locale>` synopsis | Y |
22.3 | Locales |  |
22.3.1 | Class `locale` | Y |
22.3.2 | `locale` globals | Y |
22.3.3 | Convenience interfaces |  |
22.3.3.1 | Character classification | Y |
22.3.3.2 | Conversions |  |
22.3.3.2.1 | Character conversions | Y |
22.3.3.2.2 | `string` conversions | N |
22.3.3.2.3 | Buffer conversions | N |
22.4 | Standard `locale` categories |  |
22.4.1 | The `ctype` category | Y |
22.4.2 | The numeric category |  |
22.4.2.1 | `num_get` | Y |
22.4.2.2 | `num_put` | Y |
22.4.3 | The numeric punctuation facet | Y |
22.4.4 | The collate category | Y |
22.4.5 | The time category |  |
22.4.5.1 | Class template `time_get` | Y |
22.4.5.2 | Class template `time_get_byname` | Y |
22.4.5.3 | Class template `time_put` | Y |
22.4.5.3 | Class template `time_put_byname` | Y |
22.4.6 | The monetary category |  |
22.4.6.1 | Class template `money_get` | Y |
22.4.6.2 | Class template `money_put` | Y |
22.4.6.3 | Class template `money_punct` | Y |
22.4.6.4 | Class template `money_punct_byname` | Y |
22.4.7 | The message retrieval category | Y |
22.4.8 | Program-defined facets | Y |
22.5 | Standard code conversion facets | N |
22.6 | C Library Locales | Y |
23 | Containers
23.1 | General |  |
23.2 | Container requirements |  |
23.2.1 | General container requirements | Y |
23.2.2 | Data races | Y |
23.2.3 | Sequence containers | Y |
23.2.4 | Associative containers | Y |
23.2.5 | Unordered associative containers | Y |
23.3 | Sequence containers |  |
23.3.1 | Class template `array` | Y |
23.3.2 | Class template `deque` | Y |
23.3.3 | Class template `forward_list` | Y |
23.3.4 | Class template `list` | Y |
23.3.5 | Container adaptors |  |
23.3.5.1 | Class template `queue` | Y |
23.3.5.2 | Class template `priority_queue` | Y |
23.3.5.3 | Class template `stack` | Y |
23.3.6 | Class template `vector` | Y |
23.3.7 | Class `vector<bool>` | Y |
23.4 | Associative containers |  |
23.4.1 | Class template `map` | Y |
23.4.2 | Class template `multimap` | Y |
23.4.3 | Class template `set` | Y |
23.4.4 | Class template `multiset` | Y |
23.5 | Unordered associative containers |  |
23.5.1 | Class template `unordered_map` | Y |
23.5.2 | Class template `unordered_multimap` | Y |
23.5.3 | Class template `unordered_set` | Y |
23.5.4 | Class template `unordered_multiset` | Y |
24 | Iterators
24.1 | General | Y |
24.2 | Iterator requirements | Y |
24.3 | Header `<iterator>` synopsis | Y |
24.4 | Iterator primitives | Y |
24.5 | Iterator adaptors |  |
24.5.1 | Reverse iterators | Y |
24.5.2 | Insert iterators | Y |
24.5.3 | Move iterators | Y |
24.6 | Stream iterators |  |
24.6.1 | Class template `istream_iterator` | Y |
24.6.2 | Class template `ostream_iterator` | Y |
24.6.3 | Class template `istreambuf_iterator` | Y |
24.6.4 | Class template `ostreambuf_iterator` | Y |
24.6.5 | range access | N |
25 | Algorithms
25.1 | General |  |
25.2 | Non-modifying sequence operations | Y |
25.3 | Mutating sequence operations | Y |
25.4 | Sorting and related operations | Y |
25.5 | C library algorithms | Y |
26 | Numerics
26.1 | General | Y |
26.2 | Numeric type requirements | Y |
26.3 | The floating-point environment | Y |
26.4 | Complex numbers | Partial | Missing constexpr
26.5 | Random number generation |  |
26.5.1 | Requirements |  |
26.5.2 | Header `<random>` synopsis |  |
26.5.3 | Random number engine class templates |  |
26.5.3.1 | Class template `linear_congruential_engine` | Y | Missing constexpr
26.5.3.2 | Class template `mersenne_twister_engine` | Y | Missing constexpr
26.5.3.3 | Class template `subtract_with_carry_engine` | Y | Missing constexpr
26.5.4 | Random number engine adaptor class templates |  |
26.5.4.1 | Class template `discard_block_engine` | Y | Missing constexpr
26.5.4.2 | Class template `independent_bits_engine` | Y | Missing constexpr
26.5.4.3 | Class template `shuffle_order_engine` | Y | Missing constexpr
26.5.5 | Engines and engine adaptors with predefined parameters | Y |
26.5.6 | Class `random_device` | Y | Missing constexpr
26.5.7 | Utilities |  |
26.5.7.1 | Class `seed_seq` | Y |
26.5.7.2 | Function template `generate_canonical` | Y |
26.5.8 | Random number distribution class templates |  |
26.5.8.1 | Uniform distributions |  |
26.5.8.1.1 | Class template `uniform_int_distribution` | Y |
26.5.8.1.2 | Class template `uniform_real_distribution` | Y |
26.5.8.2 | Bernoulli distributions |  |
26.5.8.2.1 | Class `bernoulli_distribution` | Y |
26.5.8.2.2 | Class template `binomial_distribution` | Y |
26.5.8.2.3 | Class template `geometric_distribution` | Y |
26.5.8.2.4 | Class template `negative_binomial_distribution` | Y |
26.5.8.3 | Poisson distributions |  |
26.5.8.3.1 | Class template `poisson_distribution` | Y |
26.5.8.3.2 | Class template `exponential_distribution` | Y |
26.5.8.3.3 | Class template `gamma_distribution` | Y |
26.5.8.3.4 | Class template `weibull_distribution` | Y |
26.5.8.3.5 | Class template `extreme_value_distribution` | Y |
26.5.8.4 | Normal distributions |  |
26.5.8.4.1 | Class template `normal_distribution` | Y |
26.5.8.4.2 | Class template `lognormal_distribution` | Y |
26.5.8.4.3 | Class template `chi_squared_distribution` | Y |
26.5.8.4.4 | Class template `cauchy_distribution` | Y |
26.5.8.4.5 | Class template `fisher_f_distribution` | Y |
26.5.8.4.6 | Class template `student_t_distribution` | Y |
26.5.8.5 | Sampling distributions |  |
26.5.8.5.1 | Class template `discrete_distribution` | Y |
26.5.8.5.2 | Class template `piecewise_constant_distribution` | Y |
26.5.8.5.3 | Class template `piecewise_linear_distribution` | Y |
26.6 | Numeric arrays |  |
26.6.1 | Header `<valarray>` synopsis | Y |
26.6.2 | Class template `valarray` | Y |
26.6.3 | `valarray` non-member operations | Y |
26.6.4 | Class `slice` | Y |
26.6.5 | Class template `slice_array` | Y |
26.6.6 | The `gslice` class | Y |
26.6.7 | Class template `gslice_array` | Y |
26.6.8 | Class template `mask_array` | Y |
26.6.9 | Class template `indirect_array` | Y |
26.6.10 | `valarray` range access | N |
26.7 | Generalized numeric operations |  |
26.7.1 | `accumulate` | Y |
26.7.2 | `inner_product` | Y |
26.7.3 | `partial_sum` | Y |
26.7.4 | `adjacent_difference` | Y |
26.7.5 | iota | Y |
26.8 | C Library | Y |
27 | Input/output library
27.1 | General | Y |
27.2 | Iostreams requirements | Y |
27.2.1 | Imbue Limitations | Y |
27.2.2 | Positioning Type Limitations | Y |
27.2.3 | Thread safety | Partial |
27.3 | Forward declarations | Y |
27.4 | Standard iostream objects | Y |
27.4.1 | Narrow stream objects | Y |
27.4.2 | Wide stream objects | Y |
27.5 | Iostreams base classes | Partial | Missing move and swap operations
27.6 | Stream buffers | Y |
27.7 | Formatting and manipulators | Partial | Missing move and swap operations
27.8 | String-based streams | Partial | Missing move and swap operations
27.9 | File-based streams | Partial | Missing move and swap operations
28 | Regular expressions
28.1 | General | N |
28.2 | Definitions | N |
28.3 | Requirements | N |
28.4 | Header `<regex>` synopsis | N |
28.5 | Namespace `std::regex_constants` | Y |
28.6 | Class `regex_error` | Y |
28.7 | Class template `regex_traits` | Partial |
28.8 | Class template `basic_regex` | Partial |
28.9 | Class template `sub_match` | Partial |
28.10 | Class template `match_results` | Partial |
28.11 | Regular expression algorithms | N |
28.12 | Regular expression Iterators | N |
28.13 | Modified ECMAScript regular expression grammar | N |
29 | Atomic operations
29.1 | General | Y |
29.2 | Header `<atomic>` synopsis | Y |
29.3 | Order and consistency | N |
29.4 | Lock-free property | Y | Based on _GLIBCXX_ATOMIC_PROPERTY
29.5 | Atomic types |  |
29.5.1 | Integral types | Y | Missing constexpr
29.5.2 | Address types | Y | Missing constexpr
29.5.3 | Generic types | Y | Missing constexpr
29.6 | Operations on atomic types | Y |
29.7 | Flag Type and operations | Y |
29.8 | Fences | N |
30 | Thread support
30.1 | General | Y |
30.2 | Requirements | Y |
30.3 | Threads |  |
30.3.1 | Class `thread` | Partial | `thread::id` is not trivially copyable
30.3.2 | Namespace `this_thread` | Y |
30.4 | Mutual exclusion |  |
30.4.1 | Mutex requirements |  |
30.4.1.1 | Class `mutex` | Y |
30.4.1.2 | Class `recursive_mutex` | Y |
30.4.2 | Timed mutex requirements |  |
30.4.2.1 | Class `timed_mutex` | Y |
30.4.2.2 | Class `recursive_timed_mutex` | Y |
30.4.3 | Locks |  |
30.4.3.1 | Class template `lock_guard` | Y |
30.4.3.2 | Class template `unique_lock` | Y |
30.4.4 | Generic locking algorithms | Y |
30.4.5 | Call once |  |
30.4.5.1 | `once_flag` | Y |
30.4.5.2 | `call_once` | Y |
30.5 | Condition variables | Partial | Missing notify_all_at_thread_exit
30.5.1 | Class `condition_variable` | Y |
30.5.2 | Class `condition_variable_any` | Y |
30.6 | Futures |  |
30.6.1 | Overview |  |
30.6.2 | Error handling | Y |
30.6.3 | Class `future_error` | Y |
30.6.4 | Associated asynchronous state | Y |
30.6.5 | Class template `promise` | Partial | Missing set_*_at_thread_exit
30.6.6 | Class template `future` | Partial | Missing future_status and future::share()
30.6.7 | Class template `shared_future` | Partial | Missing future_status
30.6.9 | Function template `async` | Y |
30.6.10 | Class template `packaged_task` | Partial | Missing make_ready_at_thread_exit
Appendix D | Compatibility features
D.1 | Increment operator with `bool` operand |  |
D.2 | `static` keyword |  |
D.3 | Access declarations |  |
D.4 | `register` keyword |  |
D.5 | Dynamic exception specifications |  |
D.6 | C standard library headers |  |
D.7 | Old iostreams members |  |
D.8 | char* streams |  |
D.9 | Binders |  |
D.10 | `auto_ptr` |  |