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 12 release series, 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 Exception support is broken on non-Linux targets. 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
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).