# C++ 2014

ISO C++ 2014

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

This status table is based on the table of contents of ISO/IEC 14882:2014. Some subclauses are not shown in the table where the content is unchanged since C++11 and the implementation is complete.

This section describes the C++14 and library TS support in mainline GCC, not in any particular release.

C++ 2014 Implementation Status

Section | Description | Status | Comments
--- | --- | --- | ---
18 | Language support
18.1 | General |  |
18.2 | Types | Y |
18.3 | Implementation properties |  |
18.3.2 | Numeric Limits |  |
18.3.2.3 | Class template `numeric_limits` | Y |
18.3.2.4 | `numeric_limits` members | Y |
18.3.2.5 | `float_round_style` | N |
18.3.2.6 | `float_denorm_style` | N |
18.3.2.7 | `numeric_limits` specializations | Y |
18.3.3 | 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 | Class bad_exception | 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 | Y |
18.10 | Other runtime support | Y |
19 | Diagnostics
19.1 | General |  |
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 | Utility components |  |
20.2.1 | Operators | Y |
20.2.2 | swap | Y |
20.2.3 | exchange | Y |
20.2.4 | forward/move helpers | Y |
20.2.5 | Function template `declval` | Y |
20.3 | Pairs | Y |
20.4 | Tuples | Y |
20.5 | Compile-time integer sequences |  |
20.5.2 | Class template `integer_sequence` | Y |
20.5.3 | Alias template `make_integer_sequence` | Y |
20.6 | Class template `bitset` | Y |
20.7 | Memory | Y |
20.8 | Smart pointers |  |
20.8.1 | Class template `unique_ptr` | Y |
20.8.1.1 | Default deleters | Y |
20.8.1.2 | `unique_ptr` for single objects | Y |
20.8.1.3 | `unique_ptr` for array objects with a runtime length | Y |
20.8.1.4 | `unique_ptr` creation | Y |
20.8.1.5 | `unique_ptr` specialized algorithms | Y |
20.8.2 | Shared-ownership pointers |  |
20.8.2.1 | Class `bad_weak_ptr` | Y |
20.8.2.2 | Class template `shared_ptr` | Y | Uses code from boost::shared_ptr.
20.8.2.3 | Class template `weak_ptr` | Y |
20.8.2.4 | Class template `owner_less` | Y |
20.8.2.5 | Class template `enable_shared_from_this` | Y |
20.8.2.6 | `shared_ptr` atomic access | Y |
20.8.2.7 | Smart pointer hash support | Y |
20.9 | Function objects |  |
20.9.1 | Definitions |  |
20.9.2 | Requirements |  |
20.9.3 | Class template `reference_wrapper` | Y |
20.9.4 | Arithmetic operation | Y |
20.9.5 | Comparisons | Y |
20.8.6 | Logical operations | Y |
20.9.7 | Bitwise operations | Y |
20.9.8 | Negators | Y |
20.9.9 | Function object binders | Y |
20.9.10 | Function template `mem_fn` | Y |
20.9.11 | Polymorphic function wrappers |  |
20.9.11.1 | Class `bad_function_call` | Y |
20.9.11.2 | Class template `function` | Partial | Missing allocator support
20.9.12 | Class template `hash` | Y |
20.10 | Metaprogramming and type traits |  |
20.10.1 | Requirements | Y |
20.10.2 | Header `<type_traits>` synopsis |  |
20.10.3 | Helper classes | Y |
20.10.4 | Unary Type Traits | Y |
20.10.5 | Type property queries | Y |
20.10.6 | Relationships between types | Y |
20.10.7 | Transformations between types | Y |
20.11 | Compile-time rational arithmetic | Y |
20.12 | Time utilities |  |
20.12.3 | Clock requirements | Y |
20.12.4 | Time-related traits | Y |
20.12.5 | Class template `duration` | Y |
20.12.5.8 | Suffixes for duration literals | Y |
20.12.6 | Class template `time_point` | Y |
20.12.7 | Clocks | Y |
20.12.8 | Date and time functions | Y |
20.13 | Scoped allocator adaptor | Y |
20.14 | Class `type_index` | Y |
21 | Strings
21.1 | General | Y |
21.2 | Character traits | 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 | Suffixes for `basic_string` literals | Y |
21.7 | Null-terminated sequence utilities | Partial | C library dependency.
22 | Localization
22.1 | General | Y |
22.2 | Header `<locale>` synopsis | Y |
22.3 | Locales | Y |
22.4 | Standard `locale` categories | Y |
22.5 | Standard code conversion facets | Y |
22.6 | C Library Locales | Y |
23 | Containers
23.1 | General |  |
23.2 | Container requirements | Y |
23.3 | Sequence containers | Y |
23.4 | Associative containers | Y |
23.5 | Unordered associative containers | Y |
23.6 | Container adaptors | 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 | Y |
24.6 | Stream iterators | Y |
24.7 | range access | Y |
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 |  |
26.2 | Numeric type requirements | Y |
26.3 | The floating-point environment | Y |
26.4 | Complex numbers | Y |
26.4.10 | Suffixes for complex number literals | Y |
26.5 | Random number generation | Y |
26.6 | Numeric arrays | Y |
26.7 | Generalized numeric operations | 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.5 | Iostreams base classes | Y |
27.6 | Stream buffers | Y |
27.7 | Formatting and manipulators | Y |
27.7.6 | Quoted manipulators | Y |
27.8 | String-based streams | Y |
27.9 | File-based streams | Y |
28 | Regular expressions
28.1 | General | Y |
28.2 | Definitions | Y |
28.3 | Requirements | Y |
28.4 | Header `<regex>` synopsis | Y |
28.5 | Namespace `std::regex_constants` | Y |
28.6 | Class `regex_error` | Y |
28.7 | Class template `regex_traits` | Partial | `transform_primary` is not correctly implemented |
28.8 | Class template `basic_regex` | Y |
28.9 | Class template `sub_match` | Y |
28.10 | Class template `match_results` | Y |
28.11 | Regular expression algorithms | Y |
28.12 | Regular expression Iterators | Y |
28.13 | Modified ECMAScript regular expression grammar | Y |
29 | Atomic operations
29.1 | General | Y |
29.2 | Header `<atomic>` synopsis | Y |
29.3 | Order and consistency | Y |
29.4 | Lock-free property | Y |
29.5 | Atomic types | Y |
29.6 | Operations on atomic types | Y |
29.7 | Flag Type and operations | Y |
29.8 | Fences | Y |
30 | Thread support
30.1 | General | Y |
30.2 | Requirements | Y |
30.3 | Threads |  |
30.3.1 | Class `thread` | Partial | `thread::id` comparisons not well-defined
30.3.2 | Namespace `this_thread` | Y |
30.4 | Mutual exclusion |  |
30.4.1 | Mutex requirements |  |
30.4.1.1 | In general |  |
30.4.1.2 | Mutex types |  |
30.4.1.2.1 | Class `mutex` | Y |
30.4.1.2.2 | Class `recursive_mutex` | Y |
30.4.1.3 | Timed mutex types |  |
30.4.1.3.1 | Class `timed_mutex` | Y |
30.4.1.3.2 | Class `recursive_timed_mutex` | Y |
30.4.1.4 | Shared timed mutex types |  |
30.4.1.4.1 | Class `shared_timed_mutex` | Y |
30.4.2 | Locks |  |
30.4.2.1 | Class template `lock_guard` | Y |
30.4.2.2 | Class template `unique_lock` | Y |
30.4.2.3 | Class template `shared_lock` | Y |
30.4.3 | Generic locking algorithms | Y |
30.4.4 | Call once |  |
30.4.4.1 | Struct `once_flag` | Y |
30.4.4.2 | Function `call_once` | Broken | See PR 66146
30.5 | Condition variables | Y |
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 | Shared state | Y |
30.6.5 | Class template `promise` | Y |
30.6.6 | Class template `future` | Y |
30.6.7 | Class template `shared_future` | Y |
30.6.8 | Function template `async` | Y |
30.6.9 | Class template `packaged_task` | Y |
Appendix D | Compatibility features
D.1 | Increment operator with `bool` operand |  |
D.2 | `register` keyword |  |
D.3 | Implicit declaration of copy functions |  |
D.4 | Dynamic exception specifications |  |
D.5 | C standard library headers | Y |
D.6 | Old iostreams members | Y |
D.7 | `char*` streams | Y |
D.8 | Function objects | Y |
D.9 | Binders | Y |
D.10 | `auto_ptr` | Y |
D.11 | Violating exception-specifications | Y |
D.12 | Random shuffle | Y |

C++ Technical Specifications Implementation Status

Paper | Title | Status | Comments
--- | --- | --- | ---
N3662 | C++ Dynamic Arrays | N | Array Extensions TS
N3793 | A proposal to add a utility class to represent optional objects | Y | Library Fundamentals TS
N3804 | Any library proposal | Y | Library Fundamentals TS
N3866 | Invocation type traits, but dropping function_call_operator. | N | Library Fundamentals TS
N3905 | Faster string searching (Boyer-Moore et al.) | Y | Library Fundamentals TS
N3915 | apply() call a function with arguments from a tuple | Y | Library Fundamentals TS
N3916 | Polymorphic memory resources | Partial (missing pool resource and buffer resource classes) | Library Fundamentals TS
N3920 | Extending shared_ptr to support arrays | Y | Library Fundamentals TS
N3921 | `string_view`: a non-owning reference to a string | Y | Library Fundamentals TS
N3925 | A sample proposal | Y | Library Fundamentals TS
N3932 | Variable Templates For Type Traits | Y | Library Fundamentals TS
N4100 | File System | Y | Link with `-lstdc++fs`