C++ 2014ISO 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 StatusSectionDescriptionStatusComments18Language support18.1General18.2TypesY18.3Implementation properties18.3.2Numeric Limits18.3.2.3Class template numeric_limitsY18.3.2.4numeric_limits membersY18.3.2.5float_round_styleN18.3.2.6float_denorm_styleN18.3.2.7numeric_limits specializationsY18.3.3C LibraryY18.4Integer types18.4.1Header <cstdint> synopsisY18.5Start and terminationPartialC library dependency for quick_exit, at_quick_exit18.6Dynamic memory managementY18.7Type identification18.7.1Class type_infoY18.7.2Class bad_castY18.7.3Class bad_typeidY18.8Exception handling18.8.1Class exceptionY18.8.2Class bad_exceptionY18.8.3Abnormal terminationY18.8.4uncaught_exceptionY18.8.5Exception PropagationY18.8.6nested_exceptionY18.9Initializer lists18.9.1Initializer list constructorsY18.9.2Initializer list accessY18.9.3Initializer list range accessY18.10Other runtime supportY19Diagnostics19.1General19.2Exception classesY19.3AssertionsY19.4Error numbersY19.5System error support19.5.1Class error_categoryY19.5.2Class error_codeY19.5.3Class error_conditionY19.5.4Comparison operatorsY19.5.5Class system_errorY20General utilities20.1General20.2Utility components20.2.1OperatorsY20.2.2swapY20.2.3exchangeY20.2.4forward/move helpersY20.2.5Function template declvalY20.3PairsY20.4TuplesY20.5Compile-time integer sequences20.5.2Class template integer_sequenceY20.5.3Alias template make_integer_sequenceY20.6Class template bitsetY20.7MemoryY20.8Smart pointers20.8.1Class template unique_ptrY20.8.1.1Default deletersY20.8.1.2unique_ptr for single objectsY20.8.1.3unique_ptr for array objects with a runtime lengthY20.8.1.4unique_ptr creationY20.8.1.5unique_ptr specialized algorithmsY20.8.2Shared-ownership pointers20.8.2.1Class bad_weak_ptrY20.8.2.2Class template shared_ptrY
Uses code from
boost::shared_ptr.
20.8.2.3Class template weak_ptrY20.8.2.4Class template owner_lessY20.8.2.5Class template enable_shared_from_thisY20.8.2.6shared_ptr atomic accessY20.8.2.7Smart pointer hash supportY20.9Function objects20.9.1Definitions20.9.2Requirements20.9.3Class template reference_wrapperY20.9.4Arithmetic operationY20.9.5ComparisonsY20.8.6Logical operationsY20.9.7Bitwise operationsY20.9.8NegatorsY20.9.9Function object bindersY20.9.10Function template mem_fnY20.9.11Polymorphic function wrappers20.9.11.1Class bad_function_callY20.9.11.2Class template functionPartialMissing allocator support20.9.12Class template hashY20.10Metaprogramming and type traits20.10.1RequirementsY20.10.2Header <type_traits> synopsis20.10.3Helper classesY20.10.4Unary Type TraitsY20.10.5Type property queriesY20.10.6Relationships between typesY20.10.7Transformations between typesY20.11Compile-time rational arithmeticY20.12Time utilities20.12.3Clock requirementsY20.12.4Time-related traitsY20.12.5Class template durationY20.12.5.8Suffixes for duration literalsY20.12.6Class template time_pointY20.12.7ClocksY20.12.8Date and time functionsY20.13Scoped allocator adaptorY20.14Class type_indexY21Strings21.1GeneralY21.2Character traitsY21.3String classesY21.4Class template basic_stringY21.5Numeric ConversionsY21.6Hash supportY21.7Suffixes for basic_string literalsY21.7Null-terminated sequence utilitiesPartialC library dependency. 22Localization22.1GeneralY22.2Header <locale> synopsisY22.3LocalesY22.4Standard locale categoriesY22.5Standard code conversion facetsY22.6C Library LocalesY23Containers23.1General23.2Container requirementsY23.3Sequence containersY23.4Associative containersY23.5Unordered associative containersY23.6Container adaptorsY24Iterators24.1GeneralY24.2Iterator requirementsY24.3Header <iterator> synopsisY24.4Iterator primitivesY24.5Iterator adaptorsY24.6Stream iteratorsY24.7range accessY25Algorithms25.1General25.2Non-modifying sequence operationsY25.3Mutating sequence operationsY25.4Sorting and related operationsY25.5C library algorithmsY26Numerics26.1General26.2Numeric type requirementsY26.3The floating-point environmentY26.4Complex numbersY26.4.10Suffixes for complex number literalsY26.5Random number generationY26.6Numeric arraysY26.7Generalized numeric operationsY26.8C LibraryY27Input/output library27.1GeneralY27.2Iostreams requirementsY27.2.1Imbue LimitationsY27.2.2Positioning Type LimitationsY27.2.3Thread safetyPartial27.3Forward declarationsY27.4Standard iostream objectsY27.5Iostreams base classesY27.6Stream buffersY27.7Formatting and manipulatorsY27.7.6Quoted manipulatorsY27.8String-based streamsY27.9File-based streamsY28Regular expressions28.1GeneralY28.2DefinitionsY28.3RequirementsY28.4Header <regex> synopsisY28.5Namespace std::regex_constantsY28.6Class regex_errorY28.7Class template regex_traitsPartialtransform_primary is not correctly implemented28.8Class template basic_regexY28.9Class template sub_matchY28.10Class template match_resultsY28.11Regular expression algorithmsY28.12Regular expression IteratorsY28.13Modified ECMAScript regular expression grammarY29Atomic operations29.1GeneralY29.2Header <atomic> synopsisY29.3Order and consistencyY29.4Lock-free propertyY29.5Atomic typesY29.6Operations on atomic typesY29.7Flag Type and operationsY29.8FencesY30Thread support30.1GeneralY30.2RequirementsY30.3Threads30.3.1Class threadPartialthread::id comparisons not well-defined30.3.2Namespace this_threadY30.4Mutual exclusion30.4.1Mutex requirements30.4.1.1In general30.4.1.2Mutex types30.4.1.2.1Class mutexY30.4.1.2.2Class recursive_mutexY30.4.1.3Timed mutex types30.4.1.3.1Class timed_mutexY30.4.1.3.2Class recursive_timed_mutexY30.4.1.4Shared timed mutex types30.4.1.4.1Class shared_timed_mutexY30.4.2Locks30.4.2.1Class template lock_guardY30.4.2.2Class template unique_lockY30.4.2.3Class template shared_lockY30.4.3Generic locking algorithmsY30.4.4Call once30.4.4.1Struct once_flagY30.4.4.2Function call_onceBrokenException support is broken on non-Linux targets.
See PR
66146.
30.5Condition variablesY30.5.1Class condition_variableY30.5.2Class condition_variable_anyY30.6Futures30.6.1Overview30.6.2Error handlingY30.6.3Class future_errorY30.6.4Shared stateY30.6.5Class template promiseY30.6.6Class template futureY30.6.7Class template shared_futureY30.6.8Function template asyncY30.6.9Class template packaged_taskYAppendix DCompatibility featuresD.1Increment operator with bool operandD.2register keywordD.3Implicit declaration of copy functionsD.4Dynamic exception specificationsD.5C standard library headersYD.6Old iostreams membersYD.7char* streamsYD.8Function objectsYD.9BindersYD.10auto_ptrYD.11Violating exception-specificationsYD.12Random shuffleY
C++ Technical Specifications Implementation StatusPaperTitleStatusComments
N3662
C++ Dynamic ArraysNArray Extensions TS
N3793
A proposal to add a utility class to represent optional objectsYLibrary Fundamentals TS
N3804
Any library proposalYLibrary Fundamentals TS
N3866
Invocation type traits, but dropping function_call_operator.NLibrary Fundamentals TS
N3905
Faster string searching (Boyer-Moore et al.)YLibrary Fundamentals TS
N3915
apply() call a function with arguments from a tupleYLibrary Fundamentals TS
N3916
Polymorphic memory resourcesPartial (missing pool resource and buffer resource classes)Library Fundamentals TS
N3920
Extending shared_ptr to support arraysYLibrary Fundamentals TS
N3921
string_view: a non-owning reference to a stringYLibrary Fundamentals TS
N3925
A sample proposalYLibrary Fundamentals TS
N3932
Variable Templates For Type TraitsYLibrary Fundamentals TS
N4100
File SystemY
Link with
Implementation Specific BehaviorFilesystem TS2.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).