# 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. GCC 6.1 was the first release with non-experimental C++14 support, so the API and ABI of features added in C++14 is only stable since that release.

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 the GCC 14 release series.

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 | Exception support is 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`

## Implementation Specific Behavior

### Filesystem TS

2.1 POSIX conformance [fs.conform.9945] The behavior of the filesystem library implementation will depend on the target operating system. Some features will not be supported on some targets. Symbolic links and file permissions are not supported on Windows.

15.30 Rename [fs.op.rename] On Windows, `experimental::filesystem::rename` is implemented by calling `MoveFileExW` and so does not meet the requirements of POSIX `rename` when one or both of the paths resolves to an existing directory. Specifically, it is possible to rename a directory so it replaces a non-directory (POSIX requires an error in that case), and it is not possible to rename a directory to replace another directory (POSIX requires that to work if the directory being replaced is empty).