Movatterモバイル変換


[0]ホーム

URL:


Chapter 1. Status
Prev Part I.  Introduction Next

Chapter 1. Status

Table of Contents

Implementation Status
C++ 1998/2003
Implementation Status
Implementation Specific Behavior
C++ 2011
Implementation Specific Behavior
C++ 2014
Implementation Specific Behavior
Filesystem TS
C++ 2017
Implementation Specific Behavior
Parallelism 2 TS
C++ 2020
Implementation Specific Behavior
C++ 2023
C++ TR1
Implementation Specific Behavior
C++ TR 24733
C++ IS 29124
Implementation Specific Behavior
License
The Code: GPL
The Documentation: GPL, FDL
Bugs
Implementation Bugs
Standard Bugs

Implementation Status

C++ 1998/2003

Implementation Status

This status table is based on the table of contents of ISO/IEC 14882:2003.

This section describes the C++ support inmainline GCC, not in any particular release.

Table 1.1. C++ 1998/2003 Implementation Status

SectionDescriptionStatusComments
18Language support
18.1TypesY 
18.2Implementation propertiesY 
18.2.1Numeric Limits  
18.2.1.1Class templatenumeric_limitsY 
18.2.1.2numeric_limits membersY 
18.2.1.3float_round_styleY 
18.2.1.4float_denorm_styleY 
18.2.1.5numeric_limits specializationsY 
18.2.2C LibraryY 
18.3Start and terminationY 
18.4Dynamic memory managementY 
18.5Type identification  
18.5.1Class type_infoY 
18.5.2Class bad_castY 
18.5.3Class bad_typeidY 
18.6Exception handling  
18.6.1Class exceptionY 
18.6.2Violation exception-specificationsY 
18.6.3Abnormal terminationY 
18.6.4uncaught_exceptionY 
18.7Other runtime supportY 
19Diagnostics
19.1Exception classesY 
19.2AssertionsY 
19.3Error numbersY 
20General utilities
20.1RequirementsY 
20.2Utility components  
20.2.1OperatorsY 
20.2.2pairY 
20.3Function objects  
20.3.1BaseY 
20.3.2Arithmetic operationY 
20.3.3ComparisonsY 
20.3.4Logical operationsY 
20.3.5NegatorsY 
20.3.6BindersY 
20.3.7Adaptors for pointers to functionsY 
20.3.8Adaptors for pointers to membersY 
20.4Memory  
20.4.1The default allocatorY 
20.4.2Raw storage iteratorY 
20.4.3Temporary buffersY 
20.4.4Specialized algorithmsY 
20.4.4.1uninitialized_copyY 
20.4.4.2uninitialized_fillY 
20.4.4.3uninitialized_fill_nY 
20.4.5Class templateauto_ptrY 
20.4.6C libraryY 
21Strings
21.1Character traits  
21.1.1Character traits requirementsY 
21.1.2traits typedefY 
21.1.3char_traits specializations  
21.1.3.1structchar_traits<char>Y 
21.1.3.2structchar_traits<wchar_t>Y 
21.2String classesY 
21.3Class templatebasic_stringY 
21.4Null-terminated sequence utilitiesYC library dependency
22Localization
22.1Locales  
22.1.1ClasslocaleY 
22.1.2locale globalsY 
22.1.3Convenience interfaces  
22.1.3.1Character classificationY 
22.1.3.2Character conversionsY 
22.2Standard locale categories  
22.2.1ctypeY 
22.2.2Numeric  
22.2.2.1num_getY 
22.2.2.2num_putY 
22.2.3num_punctY 
22.2.4collateY 
22.2.5Time  
22.2.5.1time_getY 
22.2.5.2time_get_bynameY 
22.2.5.3time_putY 
22.2.5.3time_put_bynameY 
22.2.6Monetary  
22.2.6.1money_getY 
22.2.6.2money_putY 
22.2.6.3money_punctY 
22.2.6.4money_punct_bynameY 
22.2.7messagesY 
22.2.8Program-defined facetsY 
22.3C Library LocalesY 
23Containers
23.1Container requirementsY 
23.2Sequence containers  
23.2.1Class templatedequeY 
23.2.2Class templatelistY 
23.2.3Adaptors  
23.2.3.1Class templatequeueY 
23.2.3.2Class templatepriority_queueY 
23.2.3.3Class templatestackY 
23.2.4Class templatevectorY 
23.2.5Classvector<bool>Y 
23.3Associative containers  
23.3.1Class templatemapY 
23.3.2Class templatemultimapY 
23.3.3Class templatesetY 
23.3.4Class templatemultisetY 
24Iterators
24.1RequirementsY 
24.2Header<iterator> synopsisY 
24.3Iterator primitivesY 
24.4Predefined iterators and Iterator adaptors  
24.4.1Reverse iteratorsY 
24.4.2Insert iteratorsY 
24.5Stream iterators  
24.5.1Class templateistream_iteratorY 
24.5.2Class templateostream_iteratorY 
24.5.3Class templateistreambuf_iteratorY 
24.5.4Class templateostreambuf_iteratorY 
25Algorithms
25.1Non-modifying sequence operationsY 
25.2Mutating sequence operationsY 
25.3Sorting and related operationsY 
25.4C library algorithmsY 
26Numerics
26.1Numeric type requirementsY 
26.2Complex numbersY 
26.3Numeric arrays  
26.3.1Header<valarray> synopsisY 
26.3.2Class templatevalarrayY 
26.3.3valarray non-member operationsY 
26.3.4ClasssliceY 
26.3.5Class templateslice_arrayY 
26.3.6ClassgsliceY 
26.3.7Class templategslice_arrayY 
26.3.8Class templatemask_arrayY 
26.3.9Class templateindirect_arrayY 
26.4Generalized numeric operations  
26.4.1accumulateY 
26.4.2inner_productY 
26.4.3partial_sumY 
26.4.4adjacent_differenceY 
26.4.5iotaY 
26.5C LibraryY 
27Input/output
27.1RequirementsY 
27.2Forward declarationsY 
27.3Standard iostream objectsY 
27.3.1Narrow stream objectsY 
27.3.2Wide stream objectsY 
27.4Iostreams base classesY 
27.5Stream buffersY 
27.6Formatting and manipulatorsY 
27.7String-based streamsY 
27.8File-based streamsY 
Appendix DCompatibility features
D.1Increment operator with bool operand  
D.2static keyword  
D.3Access declarations  
D.4Implicit conversion from const strings  
D.5C standard library headers  
D.6Old iostreams members  
D.7char* streams  

Implementation Specific Behavior

The ISO standard defines the following phrase:

[1.3.5] implementation-defined behavior

Behavior, for a well-formed program construct and correct data, that depends on the implementationand that each implementation shall document.

We do so here, for the C++ library only. Behavior of the compiler, linker, runtime loader, and other elements of "the implementation" are documented elsewhere. Everything listed in Annex B, Implementation Qualities, are also part of the compiler, not the library.

For each entry, we give the section number of the standard, when applicable. This list is probably incomplet and inkorrekt.

1.9 [intro.execution]/11 #3 Ifisatty(3) is true, then interactive stream support is implied.

17.4.4.5 [lib.reentrancy] Non-reentrant functions are probably best discussed in the various sections on multithreading (see above).

18.1 [lib.support.types]/4 The type ofNULL is described underSupport.

18.3 [lib.support.start.term]/8 Even though it's listed in the library sections, libstdc++ has zero control over what the cleanup code hands back to the runtime loader. Talk to the compiler people. :-)

18.4.2.1 [lib.bad.alloc]/5 (bad_alloc),18.5.2 [lib.bad.cast]/5 (bad_cast),18.5.3 [lib.bad.typeid]/5 (bad_typeid),18.6.1 [lib.exception]/8 (exception),18.6.2.1 [lib.bad.exception]/5 (bad_exception): Thewhat() member function of classstd::exception, and these other classes publicly derived from it, returns the name of the class, e.g."std::bad_alloc".

18.5.1 [lib.type.info]/7 The return value ofstd::type_info::name() is the mangled type name. You will need to callc++filt and pass the names as command-line parameters to demangle them, or call aruntime demangler function.

20.1.5 [lib.allocator.requirements]/5"Implementors are encouraged to supply libraries that can accept allocators that encapsulate more general memory models and that support non-equal instances. In such implementations, any requirements imposed on allocators by containers beyond those requirements that appear in Table 32, and the semantics of containers and algorithms when allocator instances compare non-equal, are implementation-defined." There is experimental support for non-equal allocators in the standard containers in C++98 mode. There are no additional requirements on allocators. It is undefined behaviour to swap two containers if their allocators are not equal.

21.1.3.1 [lib.char.traits.specializations.char]/3,4,21.1.3.2 [lib.char.traits.specializations.wchar.t]/2,21.3 [lib.basic.string]/6 basic_string::iterator, basic_string::const_iterator,23.* [lib.containers]'s foo::iterator,27.* [lib.input.output]'s foo::*_type,others... Nope, these types are called implementation-defined because you shouldn't be taking advantage of their underlying types. Listing them here would defeat the purpose. :-)

21.1.3.1 [lib.char.traits.specializations.char]/5 I don't really know about thembstate_t stuff... see thecodecvt notes for what does exist.

22.* [lib.localization] Anything and everything we have on locale implementation will be described underLocalization.

23.* [lib.containers] All of the containers in this clause definesize_type asstd::size_t anddifference_type asstd::ptrdiff_t.

26.2.8 [lib.complex.transcendentals/9 I have no idea whatcomplex<T>'spow(0,0) returns.

27.4.2.4 [lib.ios.members.static/2 Callingstd::ios_base::sync_with_stdio after I/O has already been performed on the standard stream objects will flush the buffers, and destroy and recreate the underlying buffer instances. Whether or not the previously-written I/O is destroyed in this process depends mostly on the--enable-libio choice: for stdio, if the written data is already in the stdio buffer, the data may be completely safe!

27.6.1.1.2 [lib.istream::sentry],27.6.2.3 [lib.ostream::sentry] The I/O sentry ctor and dtor can perform additional work than the minimum required. We are not currently taking advantage of this yet.

27.7.1.3 [lib.stringbuf.virtuals]/16,27.8.1.4 [lib.filebuf.virtuals]/10 The effects ofpubsetbuf/setbuf are described in theInput and Output chapter.

27.8.1.4 [lib.filebuf.virtuals]/16 Callingfstream::sync when a get area exists will... whateverfflush() does, I think.

C++ 2011

This table is based on the table of contents of ISO/IECJTC1 SC22 WG21 Doc No: N3290 Date: 2011-04-11Final Draft International Standard, Standard for Programming Language C++

In this implementation the-std=gnu++11 or-std=c++11 flag must be used to enable languageand libraryfeatures. Seedialectoptions. The pre-defined symbol__cplusplus is used to check for thepresence of the required flag.GCC 5.1 was the first release with non-experimental C++11 support,so the API and ABI of features added in C++11 is only stablesince that release.

This status table is based on the table of contents of ISO/IEC 14882:2011.

This section describes the C++11 support inmainline GCC, not in any particular release.

Table 1.2. C++ 2011 Implementation Status

SectionDescriptionStatusComments
18Language support
18.1General  
18.2TypesY 
18.3Implementation properties  
18.3.2Numeric Limits  
18.3.2.3Class templatenumeric_limitsY 
18.3.2.4numeric_limits membersY 
18.3.2.5float_round_styleN 
18.3.2.6float_denorm_styleN 
18.3.2.7numeric_limits specializationsY 
18.3.3C LibraryY 
18.4Integer types  
18.4.1Header<cstdint> synopsisY 
18.5Start and terminationPartialC library dependency for quick_exit, at_quick_exit
18.6Dynamic memory managementY 
18.7Type identification  
18.7.1Class type_infoY 
18.7.2Class bad_castY 
18.7.3Class bad_typeidY 
18.8Exception handling  
18.8.1Class exceptionY 
18.8.2Class bad_exceptionY 
18.8.3Abnormal terminationY 
18.8.4uncaught_exceptionY 
18.8.5Exception PropagationY 
18.8.6nested_exceptionY 
18.9Initializer lists  
18.9.1Initializer list constructorsY 
18.9.2Initializer list accessY 
18.9.3Initializer list range accessY 
18.10Other runtime supportY 
19Diagnostics
19.1General  
19.2Exception classesY 
19.3AssertionsY 
19.4Error numbersY 
19.5System error support  
19.5.1Classerror_categoryY 
19.5.2Classerror_codeY 
19.5.3Classerror_conditionY 
19.5.4Comparison operatorsY 
19.5.5Classsystem_errorY 
20General utilities
20.1General  
20.2Utility components  
20.2.1OperatorsY 
20.2.2swapY 
20.2.3forward/move helpersY 
20.2.4Function templatedeclvalY 
20.3Pairs  
20.3.1In general  
20.3.2Class templatepairY 
20.3.3Specialized algorithmsY 
20.3.4Tuple-like access topairY 
20.3.5Piecewise constructionY 
20.4Tuples  
20.4.1In general  
20.4.2Class templatetuple  
20.4.2.1ConstructionY 
20.4.2.2AssignmentY 
20.4.2.3SwapY 
20.4.2.4Tuple creation functionsY 
20.4.2.5Tuple helper classesY 
20.4.2.6Element accessY 
20.4.2.7Relational operatorsY 
20.4.2.8Tuple traitsY 
20.4.2.9Tuple specialized algorithmsY 
20.5Class templatebitsetY 
20.5.1bitset constructorsY 
20.5.2bitset membersY 
20.5.3bitset hash supportY 
20.5.4bitset operatorsY 
20.6Memory  
20.6.1In general  
20.6.2Header<memory> synopsis  
20.6.3Pointer traitsY 
20.6.4Pointer safetyY 
20.6.5AlignY 
20.6.6Allocator argument tagY 
20.6.7uses_allocatorY 
20.6.8Allocator traitsY 
20.6.9The default allocatorY 
20.6.10Raw storage iteratorY 
20.6.11Temporary buffersY 
20.6.12Specialized algorithms  
20.6.12.1addressofY 
20.6.12.2uninitialized_copyY 
20.6.12.3uninitialized_fillY 
20.6.12.4uninitialized_fill_nY 
20.6.13C libraryY 
20.7Smart pointers  
20.7.1Class templateunique_ptrY 
20.7.2Shared-ownership pointers  
20.7.2.1Classbad_weak_ptrY 
20.7.2.2Class templateshared_ptrY Uses code fromboost::shared_ptr.
20.7.2.3Class templateweak_ptrY 
20.7.2.4Class templateenable_shared_from_thisY 
20.7.2.5shared_ptr atomic accessY 
20.7.2.6Smart pointer hash supportY 
20.8Function objects  
20.8.1Definitions  
20.8.2Requirements  
20.8.3Class templatereference_wrapperY 
20.8.4Arithmetic operationY 
20.8.5ComparisonsY 
20.8.6Logical operationsY 
20.8.7Bitwise operationsY 
20.8.8NegatorsY 
20.8.9Function templatebindY 
20.8.10Function templatemem_fnY 
20.8.11Polymorphic function wrappers  
20.8.11.1Classbad_function_callY 
20.8.11.2Class templatefunctionPartialMissing allocator support
20.8.12Class templatehashY 
20.9Metaprogramming and type traits  
20.9.1RequirementsY 
20.9.2Header<type_traits> synopsis  
20.9.3Helper classesY 
20.9.4Unary Type TraitsY 
20.9.4.1Primary type categoriesY 
20.9.4.2Composite type traitsY 
20.9.4.3Type propertiesY 
20.9.5Type property queriesY 
20.9.6Relationships between typesY 
20.9.7Transformations between types  
20.9.7.1Const-volatile modificationsY 
20.9.7.2Reference modificationsY 
20.9.7.3Sign modificationsY 
20.9.7.4Array modificationsY 
20.9.7.5Pointer modificationsY 
20.9.7.6Other transformationsY 
20.10Compile-time rational arithmetic  
20.10.1In general  
20.10.2Header<ratio> synopsis  
20.10.3Class templateratioY 
20.10.4Arithmetic onratiosY 
20.10.5Comparison ofratiosY 
20.10.6SI types forratioY 
20.11Time utilities  
20.11.3Clock requirementsY 
20.11.4Time-related traits  
20.11.4.1treat_as_floating_pointY 
20.11.4.2duration_valuesY 
20.11.4.3Specializations ofcommon_typeY 
20.11.5Class templatedurationY 
20.11.6Class templatetime_pointY 
20.11.7Clocks  
20.11.7.1Classsystem_clockY 
20.11.7.2Classsteady_clockY 
20.11.7.3Classhigh_resolution_clockY 
20.11.8Date and time functionsY 
20.12Scoped allocator adaptorY 
20.12.1Header<scoped_allocator> synopsis  
20.12.2Scoped allocator adaptor member typesY 
20.12.3Scoped allocator adaptor constructorsY 
20.12.4Scoped allocator adaptor membersY 
20.12.5Scoped allocator operatorsY 
20.13Classtype_indexY 
21Strings
21.1GeneralY 
21.2Character traits  
21.2.1Character traits requirementsY 
21.2.2traits typedefsY 
21.2.3char_traits specializations  
21.2.3.1structchar_traits<char>Y 
21.2.3.2structchar_traits<char16_t>Y 
21.2.3.3structchar_traits<char32_t>Y 
21.2.3.4structchar_traits<wchar_t>Y 
21.3String classesY 
21.4Class templatebasic_stringY 
21.5Numeric ConversionsY 
21.6Hash supportY 
21.7Null-terminated sequence utilitiesPartialC library dependency.
22Localization
22.1GeneralY 
22.2Header<locale> synopsisY 
22.3Locales  
22.3.1ClasslocaleY 
22.3.2locale globalsY 
22.3.3Convenience interfaces  
22.3.3.1Character classificationY 
22.3.3.2Conversions  
22.3.3.2.1Character conversionsY 
22.3.3.2.2string conversionsY 
22.3.3.2.3Buffer conversionsY 
22.4Standardlocale categories  
22.4.1Thectype categoryY 
22.4.2The numeric category  
22.4.2.1num_getY 
22.4.2.2num_putY 
22.4.3The numeric punctuation facetY 
22.4.4The collate categoryY 
22.4.5The time category  
22.4.5.1Class templatetime_getY 
22.4.5.2Class templatetime_get_bynameY 
22.4.5.3Class templatetime_putY 
22.4.5.3Class templatetime_put_bynameY 
22.4.6The monetary category  
22.4.6.1Class templatemoney_getY 
22.4.6.2Class templatemoney_putY 
22.4.6.3Class templatemoney_punctY 
22.4.6.4Class templatemoney_punct_bynameY 
22.4.7The message retrieval categoryY 
22.4.8Program-defined facetsY 
22.5Standard code conversion facetsY 
22.6C Library LocalesY 
23Containers
23.1General  
23.2Container requirements  
23.2.1General container requirementsY 
23.2.2Container data racesY 
23.2.3Sequence containersY 
23.2.4Associative containersY 
23.2.5Unordered associative containersY 
23.3Sequence containers  
23.3.2Class templatearrayY 
23.3.3Class templatedequeY 
23.3.4Class templateforward_listY 
23.3.5Class templatelistY 
23.3.6Class templatevectorY 
23.3.7Classvector<bool>Y 
23.4Associative containers  
23.4.4Class templatemapY 
23.4.5Class templatemultimapY 
23.4.6Class templatesetY 
23.4.7Class templatemultisetY 
23.5Unordered associative containers  
23.5.4Class templateunordered_mapY 
23.5.5Class templateunordered_multimapY 
23.5.6Class templateunordered_setY 
23.5.7Class templateunordered_multisetY 
23.6Container adaptors  
23.6.1Class templatequeueY 
23.6.2Class templatepriority_queueY 
23.6.3Class templatestackY 
24Iterators
24.1GeneralY 
24.2Iterator requirementsY 
24.3Header<iterator> synopsisY 
24.4Iterator primitivesY 
24.5Iterator adaptors  
24.5.1Reverse iteratorsY 
24.5.2Insert iteratorsY 
24.5.3Move iteratorsY 
24.6Stream iterators  
24.6.1Class templateistream_iteratorY 
24.6.2Class templateostream_iteratorY 
24.6.3Class templateistreambuf_iteratorY 
24.6.4Class templateostreambuf_iteratorY 
24.6.5range accessY 
25Algorithms
25.1General  
25.2Non-modifying sequence operationsY 
25.3Mutating sequence operationsY 
25.4Sorting and related operationsY 
25.5C library algorithmsY 
26Numerics
26.1General  
26.2Numeric type requirementsY 
26.3The floating-point environmentY 
26.4Complex numbersY 
26.5Random number generation  
26.5.1Requirements  
26.5.2Header<random> synopsis  
26.5.3Random number engine class templates  
26.5.3.1Class templatelinear_congruential_engineY 
26.5.3.2Class templatemersenne_twister_engineY 
26.5.3.3Class templatesubtract_with_carry_engineY 
26.5.4Random number engine adaptor class templates  
26.5.4.2Class templatediscard_block_engineY 
26.5.4.3Class templateindependent_bits_engineY 
26.5.4.4Class templateshuffle_order_engineY 
26.5.5Engines and engine adaptors with predefined parametersY 
26.5.6Classrandom_deviceY 
26.5.7Utilities  
26.5.7.1Classseed_seqY 
26.5.7.2Function templategenerate_canonicalY 
26.5.8Random number distribution class templates  
26.5.8.2Uniform distributions  
26.5.8.2.1Class templateuniform_int_distributionY 
26.5.8.2.2Class templateuniform_real_distributionY 
26.5.8.3Bernoulli distributions  
26.5.8.3.1Classbernoulli_distributionY 
26.5.8.3.2Class templatebinomial_distributionY 
26.5.8.3.3Class templategeometric_distributionY 
26.5.8.3.4Class templatenegative_binomial_distributionY 
26.5.8.4Poisson distributions  
26.5.8.4.1Class templatepoisson_distributionY 
26.5.8.4.2Class templateexponential_distributionY 
26.5.8.4.3Class templategamma_distributionY 
26.5.8.4.4Class templateweibull_distributionY 
26.5.8.4.5Class templateextreme_value_distributionY 
26.5.8.5Normal distributions  
26.5.8.5.1Class templatenormal_distributionY 
26.5.8.5.2Class templatelognormal_distributionY 
26.5.8.5.3Class templatechi_squared_distributionY 
26.5.8.5.4Class templatecauchy_distributionY 
26.5.8.5.5Class templatefisher_f_distributionY 
26.5.8.5.6Class templatestudent_t_distributionY 
26.5.8.6Sampling distributions  
26.5.8.6.1Class templatediscrete_distributionY 
26.5.8.6.2Class templatepiecewise_constant_distributionY 
26.5.8.6.3Class templatepiecewise_linear_distributionY 
26.6Numeric arrays  
26.6.1Header<valarray> synopsisY 
26.6.2Class templatevalarrayY 
26.6.3valarray non-member operationsY 
26.6.4ClasssliceY 
26.6.5Class templateslice_arrayY 
26.6.6Thegslice classY 
26.6.7Class templategslice_arrayY 
26.6.8Class templatemask_arrayY 
26.6.9Class templateindirect_arrayY 
26.6.10valarray range accessY 
26.7Generalized numeric operations  
26.7.1Header<numeric> synopsisY 
26.7.2Accumulate>Y 
26.7.3Inner productY 
26.7.4Partial sumY 
26.7.5Adjacent differenceY 
26.7.6IotaY 
26.8C LibraryY 
27Input/output library
27.1GeneralY 
27.2Iostreams requirementsY 
27.2.1Imbue LimitationsY 
27.2.2Positioning Type LimitationsY 
27.2.3Thread safetyPartial 
27.3Forward declarationsY 
27.4Standard iostream objectsY 
27.4.1OverviewY 
27.4.2Narrow stream objectsY 
27.4.3Wide stream objectsY 
27.5Iostreams base classesY 
27.6Stream buffersY 
27.7Formatting and manipulatorsY 
27.8String-based streamsY 
27.9File-based streamsY 
28Regular expressions
28.1GeneralY 
28.2DefinitionsY 
28.3RequirementsY 
28.4Header<regex> synopsisY 
28.5Namespacestd::regex_constantsY 
28.6Classregex_errorY 
28.7Class templateregex_traitsPartialtransform_primary is not correctly implemented
28.8Class templatebasic_regexY 
28.9Class templatesub_matchY 
28.10Class templatematch_resultsY 
28.11Regular expression algorithmsY 
28.12Regular expression IteratorsY 
28.13Modified ECMAScript regular expression grammarY 
29Atomic operations
29.1GeneralY 
29.2Header<atomic> synopsisY 
29.3Order and consistencyY 
29.4Lock-free propertyY 
29.5Atomic typesY 
29.6Operations on atomic typesY 
29.7Flag Type and operationsY 
29.8FencesY 
30Thread support
30.1GeneralY 
30.2RequirementsY 
30.3Threads  
30.3.1ClassthreadPartialthread::id comparisons not well-defined
30.3.2Namespacethis_threadY 
30.4Mutual exclusion  
30.4.1Mutex requirements  
30.4.1.1In general  
30.4.1.2Mutex types  
30.4.1.2.1ClassmutexY 
30.4.1.2.2Classrecursive_mutexY 
30.4.1.3Timed mutex types  
30.4.1.3.1Classtimed_mutexY 
30.4.1.3.2Classrecursive_timed_mutexY 
30.4.2Locks  
30.4.2.1Class templatelock_guardY 
30.4.2.2Class templateunique_lockY 
30.4.3Generic locking algorithmsY 
30.4.4Call once  
30.4.4.1Structonce_flagY 
30.4.4.2Functioncall_onceYException support is broken.SeePR66146.
30.5Condition variablesY 
30.5.1Classcondition_variableY 
30.5.2Classcondition_variable_anyY 
30.6Futures  
30.6.1Overview  
30.6.2Error handlingY 
30.6.3Classfuture_errorY 
30.6.4Shared stateY 
30.6.5Class templatepromiseY 
30.6.6Class templatefutureY 
30.6.7Class templateshared_futureY 
30.6.8Function templateasyncY 
30.6.9Class templatepackaged_taskY 
Appendix DCompatibility features
D.1Increment operator withbool operand  
D.2register keyword  
D.3Implicit declaration of copy functions  
D.4Dynamic exception specifications  
D.5C standard library headersY 
D.6Old iostreams membersY 
D.7char* streamsY 
D.8Function objectsY 
D.9BindersY 
D.10auto_ptrY 
D.11Violating exception-specificationsY 

Implementation Specific Behavior

For behaviour which is also specified by the 1998 and 2003 standards, seeC++ 1998/2003 Implementation Specific Behavior. This section only documents behaviour which is new in the 2011 standard.

17.6.5.12 [res.on.exception.handling] There are no implementation-defined exception classes, only standard exception classes (or classes derived from them) will be thrown.

17.6.5.14 [value.error.codes] Theerror_category for errors originating outside the OS, and the possible error code values for each error category, should be documented here.

18.6.2.2 [new.badlength]what() returns"std::bad_array_new_length".

20.6.9.1 [allocator.member]/5 Over-aligned types are not supported bystd::allocator.

20.7.2.2.1 [util.smartptr.shared.const] When ashared_ptr constructor failsbad_alloc (or types derived from it) will be thrown, or when an allocator is passed to the constructor then any exceptions thrown by the allocator.

20.7.2.0 [util.smartptr.weakptr]what() returns"bad_weak_ptr".

20.8.11.1 [func.wrap.badcall]what() returns"bad_function_call".

20.8.9.1.3 [func.bind.place]/1 There are 29 placeholders defined and the placeholder types areCopyAssignable.

20.11.7.1 [time.clock.system]/3, /4 Time point values are truncated totime_t values. There is no loss of precision for conversions in the other direction.

20.15.7 [meta.trans]/2aligned_storage does not support extended alignment.

21.2.3.2 [char.traits.specializations.char16_t],21.2.3.3 [char.traits.specializations.char32_t] The typesu16streampos andu32streampos are both synonyms forfpos<mbstate_t>. The functioneof returnsint_type(-1).char_traits<char16_t>::to_int_type will transform the "noncharacter" U+FFFF to U+FFFD (REPLACEMENT CHARACTER). This is done to ensure thatto_int_type never returns the same value aseof, which is U+FFFF.

22.3.1 [locale] There is one global locale for the whole program, not per-thread.

22.4.5.1.2 [locale.time.get.virtuals],22.4.5.3.2 [locale.time.put.virtuals] Additional supported formats should be documented here.

22.4.7.1.2 [locale.messages.virtuals] The mapping should be documented here.

23.3.2.1 [array.overview]array<T, N>::iterator isT* andarray<T, N>::const_iterator isconst T*.

23.5.4.2 [unord.map.cnstr],23.5.5.2 [unord.multimap.cnstr],23.5.6.2 [unord.set.cnstr],23.5.7.2 [unord.multiset.cnstr] The default minimal bucket count is 0 for the default constructors, range constructors and initializer-list constructors.

25.3.12 [alg.random.shuffle] The two-argument overload ofrandom_shuffle usesrand as the source of randomness.

26.5.5 [rand.predef] The typedefault_random_engine is a synonym forminstd_rand0.

26.5.6 [rand.device] Thetoken parameter of therandom_device constructor can be used to select a specific source of random bytes. The valid token values are shown in the list below. The default constructor uses the token"default".

"default"
Select the first available source from the other entries below. This is the only token that is always valid.
"rand_s"
Use the MSVCRTrand_s function. This token is only valid for mingw-w64 targets.
"rdseed","rdrand" or"rdrnd"
Use the IA-32RDSEED orRDRAND instruction to read from an on-chip hardware random number generator. These tokens are only valid for x86 and x86_64 targets when both the assembler and CPU support the corresponding instruction.
"darn"
Use the Power ISA-3.0DARN ("Deliver A Random Number") instruction to read from an on-chip hardware random number generator. This token is only valid for 64-bit powerpc targets when both the assembler and CPU support the corresponding instruction.
"hw","hardware"
Use any available CPU instruction to read from an on-chip hardware random number generator. This is equivalent to trying each of the following and using the first that is supported:"rdseed""rdrand""darn"
"arc4random","getentropy"
Use the named C library function, if available on the target.
"/dev/urandom","/dev/random"
Use the named character special file to read random bytes from. These tokens are only valid when the device files are present and readable by the current user.
"mt19937",seed value
When no source of nondeterministic random numbers is available amersenne_twister_engine will be used. An integer seed value can be used as the token and will be converted to anunsigned long usingstrtoul. These tokens are only valid when no other source of random bytes is available.

An exception of typeruntime_error will be thrown if arandom_device object is constructed with an invalid token, or if it cannot open or read from the source of random bytes.

26.5.8.1 [rand.dist.general] The algorithms used by the distributions should be documented here.

26.8 [c.math] Whether therand function introduces data races depends on the C library as the function is not provided by libstdc++.

27.8.2.1 [stringbuf.cons] Whether the sequence pointers are copied by thebasic_stringbuf move constructor should be documented here.

27.9.1.2 [filebuf.cons] Whether the sequence pointers are copied by thebasic_filebuf move constructor should be documented here.

28.5.1 [re.synopt], 28.5.2 [re.matchflag], 28.5.3 [re.err]syntax_option_type,match_flag_type anderror_type are unscoped enumeration types.

28.7 [re.traits] Theblank character class corresponds to thectype_base::blank mask.

29.4 [atomics.lockfree] The values of theATOMIC_xxx_LOCK_FREE macros depend on the target and cannot be listed here.

30.2.3 [thread.req.native]/1native_handle_type andnative_handle are provided. The handle types are defined in terms of the Gthreads abstraction layer, although this is subject to change at any time. Any use ofnative_handle is inherently non-portable and not guaranteed to work between major releases of GCC.

thread
The native handle type is a typedef for__gthread_t i.e.pthread_t when GCC is configured with theposix thread model. The value of the native handle is undefined for a thread which is not joinable.
mutex,timed_mutex
The native handle type is__gthread_mutex_t* i.e.pthread_mutex_t* for theposix thread model.
recursive_mutex,recursive_timed_mutex
The native handle type is__gthread_recursive_mutex_t* i.e.pthread_mutex_t* for theposix thread model.
condition_variable
The native handle type is__gthread_cond_t* i.e.pthread_cond_t* for theposix thread model.

30.6.1 [futures.overview]/2launch is a scoped enumeration type with overloaded operators to support bitmask operations. There are no additional bitmask elements defined.

C++ 2014

In this implementation the-std=gnu++14 or-std=c++14 flag must be used to enable languageand libraryfeatures. Seedialectoptions. The pre-defined symbol__cplusplus is used to check for thepresence 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 stablesince 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 unchangedsince C++11 and the implementation is complete.

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

Table 1.3. C++ 2014 Implementation Status

SectionDescriptionStatusComments
18Language support
18.1General  
18.2TypesY 
18.3Implementation properties  
18.3.2Numeric Limits  
18.3.2.3Class templatenumeric_limitsY 
18.3.2.4numeric_limits membersY 
18.3.2.5float_round_styleN 
18.3.2.6float_denorm_styleN 
18.3.2.7numeric_limits specializationsY 
18.3.3C LibraryY 
18.4Integer types  
18.4.1Header<cstdint> synopsisY 
18.5Start and terminationPartialC library dependency for quick_exit, at_quick_exit
18.6Dynamic memory managementY 
18.7Type identification  
18.7.1Class type_infoY 
18.7.2Class bad_castY 
18.7.3Class bad_typeidY 
18.8Exception handling  
18.8.1Class exceptionY 
18.8.2Class bad_exceptionY 
18.8.3Abnormal terminationY 
18.8.4uncaught_exceptionY 
18.8.5Exception PropagationY 
18.8.6nested_exceptionY 
18.9Initializer lists  
18.9.1Initializer list constructorsY 
18.9.2Initializer list accessY 
18.9.3Initializer list range accessY 
18.10Other runtime supportY 
19Diagnostics
19.1General  
19.2Exception classesY 
19.3AssertionsY 
19.4Error numbersY 
19.5System error support  
19.5.1Classerror_categoryY 
19.5.2Classerror_codeY 
19.5.3Classerror_conditionY 
19.5.4Comparison operatorsY 
19.5.5Classsystem_errorY 
20General utilities
20.1General  
20.2Utility components  
20.2.1OperatorsY 
20.2.2swapY 
20.2.3exchangeY 
20.2.4forward/move helpersY 
20.2.5Function templatedeclvalY 
20.3PairsY 
20.4TuplesY 
20.5Compile-time integer sequences  
20.5.2Class templateinteger_sequenceY 
20.5.3Alias templatemake_integer_sequenceY 
20.6Class templatebitsetY 
20.7MemoryY 
20.8Smart pointers  
20.8.1Class templateunique_ptrY 
20.8.1.1Default deletersY 
20.8.1.2unique_ptr for single objectsY 
20.8.1.3unique_ptr for array objects with a runtime lengthY 
20.8.1.4unique_ptr creationY 
20.8.1.5unique_ptr specialized algorithmsY 
20.8.2Shared-ownership pointers  
20.8.2.1Classbad_weak_ptrY 
20.8.2.2Class templateshared_ptrY Uses code fromboost::shared_ptr.
20.8.2.3Class templateweak_ptrY 
20.8.2.4Class templateowner_lessY 
20.8.2.5Class templateenable_shared_from_thisY 
20.8.2.6shared_ptr atomic accessY 
20.8.2.7Smart pointer hash supportY 
20.9Function objects  
20.9.1Definitions  
20.9.2Requirements  
20.9.3Class templatereference_wrapperY 
20.9.4Arithmetic operationY 
20.9.5ComparisonsY 
20.8.6Logical operationsY 
20.9.7Bitwise operationsY 
20.9.8NegatorsY 
20.9.9Function object bindersY 
20.9.10Function templatemem_fnY 
20.9.11Polymorphic function wrappers  
20.9.11.1Classbad_function_callY 
20.9.11.2Class templatefunctionPartialMissing allocator support
20.9.12Class templatehashY 
20.10Metaprogramming and type traits  
20.10.1RequirementsY 
20.10.2Header<type_traits> synopsis  
20.10.3Helper classesY 
20.10.4Unary Type TraitsY 
20.10.5Type property queriesY 
20.10.6Relationships between typesY 
20.10.7Transformations between typesY 
20.11Compile-time rational arithmeticY 
20.12Time utilities  
20.12.3Clock requirementsY 
20.12.4Time-related traitsY 
20.12.5Class templatedurationY 
20.12.5.8Suffixes for duration literalsY 
20.12.6Class templatetime_pointY 
20.12.7ClocksY 
20.12.8Date and time functionsY 
20.13Scoped allocator adaptorY 
20.14Classtype_indexY 
21Strings
21.1GeneralY 
21.2Character traitsY 
21.3String classesY 
21.4Class templatebasic_stringY 
21.5Numeric ConversionsY 
21.6Hash supportY 
21.7Suffixes forbasic_string literalsY 
21.7Null-terminated sequence utilitiesPartialC library dependency.
22Localization
22.1GeneralY 
22.2Header<locale> synopsisY 
22.3LocalesY 
22.4Standardlocale categoriesY 
22.5Standard code conversion facetsY 
22.6C Library LocalesY 
23Containers
23.1General  
23.2Container requirementsY 
23.3Sequence containersY 
23.4Associative containersY 
23.5Unordered associative containersY 
23.6Container adaptorsY 
24Iterators
24.1GeneralY 
24.2Iterator requirementsY 
24.3Header<iterator> synopsisY 
24.4Iterator primitivesY 
24.5Iterator adaptorsY 
24.6Stream iteratorsY 
24.7range accessY 
25Algorithms
25.1General  
25.2Non-modifying sequence operationsY 
25.3Mutating sequence operationsY 
25.4Sorting and related operationsY 
25.5C library algorithmsY 
26Numerics
26.1General  
26.2Numeric type requirementsY 
26.3The floating-point environmentY 
26.4Complex numbersY 
26.4.10Suffixes for complex number literalsY 
26.5Random number generationY 
26.6Numeric arraysY 
26.7Generalized numeric operationsY 
26.8C LibraryY 
27Input/output library
27.1GeneralY 
27.2Iostreams requirementsY 
27.2.1Imbue LimitationsY 
27.2.2Positioning Type LimitationsY 
27.2.3Thread safetyPartial 
27.3Forward declarationsY 
27.4Standard iostream objectsY 
27.5Iostreams base classesY 
27.6Stream buffersY 
27.7Formatting and manipulatorsY 
27.7.6Quoted manipulatorsY 
27.8String-based streamsY 
27.9File-based streamsY 
28Regular expressions
28.1GeneralY 
28.2DefinitionsY 
28.3RequirementsY 
28.4Header<regex> synopsisY 
28.5Namespacestd::regex_constantsY 
28.6Classregex_errorY 
28.7Class templateregex_traitsPartialtransform_primary is not correctly implemented
28.8Class templatebasic_regexY 
28.9Class templatesub_matchY 
28.10Class templatematch_resultsY 
28.11Regular expression algorithmsY 
28.12Regular expression IteratorsY 
28.13Modified ECMAScript regular expression grammarY 
29Atomic operations
29.1GeneralY 
29.2Header<atomic> synopsisY 
29.3Order and consistencyY 
29.4Lock-free propertyY 
29.5Atomic typesY 
29.6Operations on atomic typesY 
29.7Flag Type and operationsY 
29.8FencesY 
30Thread support
30.1GeneralY 
30.2RequirementsY 
30.3Threads  
30.3.1ClassthreadPartialthread::id comparisons not well-defined
30.3.2Namespacethis_threadY 
30.4Mutual exclusion  
30.4.1Mutex requirements  
30.4.1.1In general  
30.4.1.2Mutex types  
30.4.1.2.1ClassmutexY 
30.4.1.2.2Classrecursive_mutexY 
30.4.1.3Timed mutex types  
30.4.1.3.1Classtimed_mutexY 
30.4.1.3.2Classrecursive_timed_mutexY 
30.4.1.4Shared timed mutex types  
30.4.1.4.1Classshared_timed_mutexY 
30.4.2Locks  
30.4.2.1Class templatelock_guardY 
30.4.2.2Class templateunique_lockY 
30.4.2.3Class templateshared_lockY 
30.4.3Generic locking algorithmsY 
30.4.4Call once  
30.4.4.1Structonce_flagY 
30.4.4.2Functioncall_onceBrokenException support is broken.SeePR66146.
30.5Condition variablesY 
30.5.1Classcondition_variableY 
30.5.2Classcondition_variable_anyY 
30.6Futures  
30.6.1Overview  
30.6.2Error handlingY 
30.6.3Classfuture_errorY 
30.6.4Shared stateY 
30.6.5Class templatepromiseY 
30.6.6Class templatefutureY 
30.6.7Class templateshared_futureY 
30.6.8Function templateasyncY 
30.6.9Class templatepackaged_taskY 
Appendix DCompatibility features
D.1Increment operator withbool operand  
D.2register keyword  
D.3Implicit declaration of copy functions  
D.4Dynamic exception specifications  
D.5C standard library headersY 
D.6Old iostreams membersY 
D.7char* streamsY 
D.8Function objectsY 
D.9BindersY 
D.10auto_ptrY 
D.11Violating exception-specificationsY 
D.12Random shuffleY 

Table 1.4. C++ Technical Specifications Implementation Status

PaperTitleStatusComments
N3662C++ Dynamic ArraysNArray Extensions TS
N3793A proposal to add a utility class to represent optional objectsYLibrary Fundamentals TS
N3804Any library proposalYLibrary Fundamentals TS
N3866Invocation type traits, but dropping function_call_operator.NLibrary Fundamentals TS
N3905Faster string searching (Boyer-Moore et al.)YLibrary Fundamentals TS
N3915apply() call a function with arguments from a tupleYLibrary Fundamentals TS
N3916Polymorphic memory resourcesPartial (missing pool resource and buffer resource classes)Library Fundamentals TS
N3920Extending shared_ptr to support arraysYLibrary Fundamentals TS
N3921string_view: a non-owning reference to a stringYLibrary Fundamentals TS
N3925A sample proposalYLibrary Fundamentals TS
N3932Variable Templates For Type TraitsYLibrary Fundamentals TS
N4100File SystemYLink 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 callingMoveFileExW and so does not meet the requirements of POSIXrename 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).

C++ 2017

In this implementation the-std=gnu++17 or-std=c++17 flag must be used to enable languageand libraryfeatures. Seedialectoptions. The pre-defined symbol__cplusplus is used to check for thepresence of the required flag.GCC 9.1 was the first release with non-experimental C++17 support,so the API and ABI of features added in C++17 is only stablesince that release.

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

The following table lists new library features that are included inthe C++17 standard. The "Proposal" column provides a link to theISO C++ committee proposal that describes the feature, while the "Status"column indicates the first version of GCC that contains an implementation ofthis feature (if it has been implemented).The "SD-6 Feature Test" column shows the corresponding macro or header fromSD-6:Feature-testing recommendations for C++.

Table 1.5. C++ 2017 Library Features

Library FeatureProposalStatusSD-6 Feature Test
constexpr std::hardware_{constructive,destructive}_interference_sizeP0154R1 12.1__cpp_lib_hardware_interference_size >= 201603
Core Issue 1776: Replacement of class objects containing reference membersP0137R1 7.1__cpp_lib_launder >= 201606
Wording forstd::uncaught_exceptions N42596.1__cpp_lib_uncaught_exceptions >= 201411
C++17 should refer to C11 instead of C99P0063R3 9.1 
Variant: a type-safe union for C++17P0088R3 7.1__has_include(<variant>),__cpp_lib_variant >= 201603 (since 7.3, see Note 1)
Library Fundamentals V1 TS Components:optionalP0220R1 7.1__has_include(<optional>),__cpp_lib_optional >= 201603 (since 7.3, see Note 1)
Library Fundamentals V1 TS Components:anyP0220R1 7.1__has_include(<any>),__cpp_lib_any >= 201603 (since 7.3, see Note 1)
Library Fundamentals V1 TS Components:string_viewP0220R1 7.1__has_include(<string_view>),__cpp_lib_string_view >= 201603 (since 7.3, see Note 1)
Library Fundamentals V1 TS Components:memory_resourceP0220R1 9.1__has_include(<memory_resource>),__cpp_lib_memory_resource >= 201603
Library Fundamentals V1 TS Components:applyP0220R1 7.1__cpp_lib_apply >= 201603
Library Fundamentals V1 TS Components:shared_ptr<T[]>P0220R1 7.1__cpp_lib_shared_ptr_arrays >= 201603
Library Fundamentals V1 TS Components: SearchersP0220R1 7.1__cpp_lib_boyer_moore_searcher >= 201603
Library Fundamentals V1 TS Components: SamplingP0220R1 7.1__cpp_lib_sample >= 201603
Constant View: A proposal for astd::as_const helper function templateP0007R1 7.1 __cpp_lib_as_const >= 201510
Improving pair and tupleN4387 6.1 N/A
make_from_tuple: apply for constructionP0209R2 7.1 __cpp_lib_make_from_tuple >= 201606
Removingauto_ptr,random_shuffle(), And Old<functional> Stuff N4190No (kept for backwards compatibility) 
Deprecating Vestigial Library Parts in C++17P0174R2 12.1 
Makingstd::owner_less more flexibleP0074R0 7.1 __cpp_lib_transparent_operators >= 201510
std::addressof should be constexprLWG2296 7.1 __cpp_lib_addressof_constexpr >= 201603
Safe conversions inunique_ptr<T[]>N4089 6 
LWG 2228: Missing SFINAE rule in unique_ptr templated assignment N4366 6 
Re-enablingshared_from_thisP0033R1 7.1__cpp_lib_enable_shared_from_this >= 201603
A proposal to addinvoke function templateN4169 6.1 __cpp_lib_invoke >= 201411
TriviallyCopyablereference_wrapper N4277 5.1 
Adoptnot_fn from Library Fundamentals 2 for C++17P0005R4 7.1__cpp_lib_not_fn >= 201603
Fixes fornot_fnP0358R1 7.1 
Fixing a design mistake in the searchers interface in Library FundamentalsP0253R1 7.1 
Extending memory management toolsP0040R3 7.1__cpp_lib_raw_memory_algorithms >= 201606L
shared_ptr::weak_typeP0163R0 7.1 __cpp_lib_shared_ptr_weak_type >= 201606
Transformation Trait Aliasvoid_t N39116.1 __cpp_lib_void_t >= 201411
Wording forbool_constant, revision 1 N43896.1 __cpp_lib_bool_constant >= 201505
Adopt Type Traits Variable Templates from Library Fundamentals TS for C++17P0006R0 7.1 __cpp_lib_type_trait_variable_templates >= 201510
Logical Operator Type TraitsP0013R1 6.1 __cpp_lib_logical_traits >= 201510
Adding [nothrow-]swappable traitsP0185R1 7.1 (__is_swappable available since 6.1) __cpp_lib_is_swappable >= 201603
is_callable, the missing INVOKE related traitP0077R2 7.1 __cpp_lib_is_invocable >= 201703
has_unique_object_representationsP0258R2 7.1 __cpp_lib_has_unique_object_representations >= 201606
Polishing<chrono>P0092R1 7.1 __cpp_lib_chrono >= 201510
Adding more constexpr to<chrono>P0505R0 7.1 __cpp_lib_chrono >= 201611 (since 7.3, see Note 2)
Constexpr forstd::char_traitsP0426R1 8.1 __cpp_lib_constexpr_string >= 201611
Integratingstd::string_view andstd::stringP0254R2 7.1
Give 'std::string' a non-const '.data()' member functionP0272R1 7.1
Cleaning-up noexcept in the Library N42586.1 __cpp_lib_allocator_traits_is_always_equal >= 201411
Contiguous Iterators N4284N/A 
Minimal incomplete type support for standard containersN4510 3.0 __cpp_lib_incomplete_container_elements >= 201505 (since 6.2, see Note 2)
Emplace return typeP0084R2 7.1 
Improved insertion interface for unique-key maps N4279 6.1 __cpp_lib_map_try_emplace >= 201411, __cpp_lib_unordered_map_try_emplace >= 201411
Splicing Maps and SetsP0083R3 7.1 __cpp_lib_node_extract >= 201606
Non-membersize() and more N4280 6.1 __cpp_lib_nonmember_container_access >= 201411
A Proposal to Add Constexpr Modifiers toreverse_iterator,move_iterator,array and Range AccessP0031R0 7.1 __cpp_lib_array_constexpr >= 201603
The Parallelism TS Should be StandardizedP0024R2 9.1 __has_include(<execution>), __cpp_lib_execution >= 201603, __cpp_lib_parallel_algorithm >= 201603 (requires linking with-ltbb, see Note 3)
An algorithm to "clamp" a value between a pair of boundary valuesP0025R0 7.1 __cpp_lib_clamp >= 201603
Adopt Selected Library Fundamentals V2 Components for C++17P0295R0 7.1 __cpp_lib_gcd_lcm >= 201606
Proposal to Introduce a 3-Argument Overload tostd::hypotP0030R1 7.1 __cpp_lib_hypot >= 201603
Mathematical Special Functions for C++17P0226R1 7.1 __cpp_lib_math_special_functions >= 201603 (see Note 4)
Adopt the File System TS for C++17P0218R1 8.1 __has_include(<filesystem>), __cpp_lib_filesystem >= 201603 (GCC 8.x requires linking with-lstdc++fs)
Relative Paths for FilesystemP0219R1 8.1 __cpp_lib_filesystem >= 201606
Adapting string_view by filesystem pathsP0392R0 8.1 __cpp_lib_filesystem >= 201606
Directory Entry Caching for Filesystem P0317R1 8.1 __cpp_lib_filesystem >= 201703
constexpratomic<T>::is_always_lock_freeP0152R1 7.1 __cpp_lib_atomic_is_always_lock_free >= 201603
A proposal to addshared_mutex (untimed) (Revision 4) N4508 6.1 __cpp_lib_shared_mutex >= 201505
Variadiclock_guard (Rev. 5)P0156R2 7.1 __cpp_lib_scoped_lock >= 201703
A byte type definitionP0298R3 7.1 __cpp_lib_byte >= 201603 (since 7.3, see Note 2)
Elementary string conversionsP0067R5 11.1 (integral types supported since 8.1) __has_include(<charconv>), __cpp_lib_to_chars >= 201611
Homogeneous interface for variant, any and optionalP0032R3 7.1 __cpp_lib_any >= 201606, __cpp_lib_optional >= 201606, __cpp_lib_variant >= 201606
Making Optional Greater Equal AgainP0307R2 7.1 __cpp_lib_optional >= 201606

Note 1: This feature is supported in GCC 7.1 and 7.2 but before GCC 7.3 the__cpp_lib macro is not defined, and compilation will fail if theheader is included without using-std to enable C++17 support.

Note 2: This feature is supported in older releases but the__cpp_lib macro is not defined to the right value(or not defined at all) until the version shown in parentheses.

Note 3: The Parallel Algorithms have an external dependency on Intel TBB 2018or later. If the<execution>header is included then-ltbb must be used to link to TBB.

Note 4: The mathematical special functions are enabled in C++17 mode fromGCC 7.1 onwards. For GCC 6.x or for C++11/C++14 define__STDCPP_WANT_MATH_SPEC_FUNCS__ to a non-zero valueand test for__STDCPP_MATH_SPEC_FUNCS__ >= 201003L.

The following status table is based on the table of contents ofISO/IEC 14882:2017.Some subclauses are not shown in the table where the content is unchangedsince C++14 and the implementation is complete.

Table 1.6. C++ 2017 Implementation Status

SectionDescriptionStatusComments
21Language support
21.1General  
21.2Common definitions  
21.3Implementation properties  
21.3.1General  
21.3.2Header<limits> synopsis  
21.3.3Floating-point type properties  
21.3.3.1float_round_styleN 
21.3.3.2float_denorm_styleN 
21.3.4Class templatenumeric_limitsY 
21.3.5Header<climits> synopsisY 
21.3.6Header<cfloat> synopsisY 
21.4Integer types  
21.4.1Header<cstdint> synopsisY 
21.5Start and terminationPartialC library dependency for quick_exit, at_quick_exit
21.6Dynamic memory management  
21.6.1Header<new> synopsis  
21.6.2Storage allocation and deallocationY 
21.6.3Storage allocation errorsY 
21.6.4Pointer optimization barrierY 
21.6.5Hardware interference sizeY 
21.7Type identificationY 
21.8Exception handling  
21.8.1Header<exception> synopsis  
21.8.2Class exceptionY 
21.8.3Class bad_exceptionY 
21.8.4Abnormal terminationY 
21.8.5uncaught_exceptionsY 
21.8.6Exception PropagationY 
21.8.7nested_exceptionY 
21.9Initializer listsY 
21.10Other runtime supportY 
22Diagnostics
22.1General  
22.2Exception classesY 
22.3AssertionsY 
22.4Error numbersY 
22.5System error support  
23General utilities
23.1General  
23.2Utility components  
23.2.1Header<utility> synopsis  
23.2.2OperatorsY 
23.2.3swapY 
23.2.4exchangeY 
23.2.5Forward/move helpersY 
23.2.6Function templateas_constY 
23.2.7Function templatedeclvalY 
23.2.8Primitive numeric output conversionYFloating-point types up to 64-bit are formatted usingRyu.Types with greater precision are formatted using the C library(sprintf and conditionallystrfromf128).For powerpc64le-unknown-linux-gnu__sprintfieee128must be provided by Glibc.
23.2.9Primitive numeric input conversionYFloating-point types up to 64-bit are parsed usingfast_float.Types with greater precision are parsed using the C library(strtold).For powerpc64le-unknown-linux-gnu__strtoieee128must be provided by Glibc.
23.3Compile-time integer sequences  
23.4PairsY 
23.5TuplesY 
23.6Optional objectsY 
23.7VariantsY 
23.8Storage for any typeY 
23.9BitsetsY 
23.10MemoryY 
23.10.1In general  
23.10.2Header<memory> synopsisY 
23.10.3Pointer traitsY 
23.10.4Pointer safetyY 
23.10.5AlignY 
23.10.6Allocator argument tagY 
23.10.7uses_allocatorY 
23.10.8Allocator traitsY 
23.10.9The default allocatorY 
23.10.10Specialized algorithmsY 
23.10.11C library memory allocationY 
23.11Smart pointers  
23.11.1Class templateunique_ptrY 
23.11.2Shared-ownership pointersY 
23.12Memory resources  
23.12.1Header<memory_resource> synopsisY 
23.12.2Classmemory_resourceY 
23.12.3Class templatepolymorphic_allocatorY 
23.12.4Access to program-widememory_resource objectsY 
23.12.5Pool resource classesY 
23.12.6Classmonotonic_buffer_resourceY 
23.13Class templatescoped_allocator_adaptorY 
23.14Function objects  
23.14.1Header<functional> synopsis  
23.14.2Definitions  
23.14.3Requirements  
23.14.4Function templateinvokeY 
23.14.5Class templatereference_wrapperY 
23.14.6Arithmetic operationY 
23.14.7ComparisonsY 
23.14.8Logical operationsY 
23.14.9Bitwise operationsY 
23.14.10Function templatenot_fnY 
23.14.11Function object bindersY 
23.14.12Function templatemem_fnY 
23.14.13Polymorphic function wrappersY 
23.14.14SearchersY 
23.14.15Class templatehashY 
23.15Metaprogramming and type traits  
23.15.1Requirements  
23.15.2Header<type_traits> synopsisY 
23.15.3Helper classesY 
23.15.4Unary Type TraitsY 
23.15.5Type property queriesY 
23.15.6Relationships between typesY 
23.15.7Transformations between typesY 
23.15.8Logical operator traitsY 
23.16Compile-time rational arithmeticY 
23.17.1In general  
23.17.2Header<chrono> synopsis  
23.17Time utilities  
23.17.3Clock requirementsY 
23.17.4Time-related traitsY 
23.17.5Class templatedurationY 
23.17.6Class templatetime_pointY 
23.17.7ClocksY 
23.17.8Header<ctime> synopsisY 
23.18Classtype_indexY 
23.19Execution policies  
23.19.1In general  
23.19.2Header<execution> synopsis  
23.19.3Execution policy type traitY 
23.19.4Sequenced execution policyY 
23.19.5Parallel execution policyY 
23.19.6Parallel and unsequenced execution policyY 
23.19.7Execution policy objectsY 
24Strings
24.1General  
24.2Character traitsY 
24.3String classesY 
24.4String view classesY 
24.4.1Header<string_view> synopsisY 
24.4.2Class templatebasic_string_viewY 
24.4.3Non-member comparison functionsY 
24.4.4Inserters and extractorsY 
24.4.5Hash supportY 
24.4.6Suffix forbasic_string_view literalsY 
24.5Null-terminated sequence utilitiesPartialC library dependency.
25Localization
25.1GeneralY 
25.2Header<locale> synopsisY 
25.3LocalesY 
25.4Standardlocale categoriesY 
25.5C Library LocalesY 
26Containers
26.1General  
26.2Container requirementsY 
26.3Sequence containersY 
26.4Associative containersY 
26.5Unordered associative containersY 
26.6Container adaptorsY 
27Iterators
27.1GeneralY 
27.2Iterator requirementsY 
27.3Header<iterator> synopsisY 
27.4Iterator primitivesY 
27.5Iterator adaptorsY 
27.6Stream iteratorsY 
27.7Range accessY 
27.8Container accessY 
28Algorithms
28.1General  
28.2Header<algorithm> synopsis  
28.3Algorithms requirements  
28.4Parallel algorithms Uses code fromoneDPL
28.5Non-modifying sequence operationsY 
28.6Mutating sequence operationsY 
28.7Sorting and related operationsY 
28.8C library algorithmsY 
29Numerics
29.1General  
29.2Definitions  
29.3Numeric type requirementsY 
29.4The floating-point environmentY 
29.5Complex numbersY 
29.6Random number generationY 
29.7Numeric arraysY 
29.8Generalized numeric operations  
29.8.1Header<numeric> synopsis  
29.8.2AccumulateY 
29.8.3ReduceY 
29.8.4Inner productY 
29.8.5Transform reduceY 
29.8.6Partial sumY 
29.8.7Exclusive scanY 
29.8.8Inclusive scanY 
29.8.9Transform exclusive scanY 
29.8.10Transform inclusive scanY 
29.8.11Adjacent differenceY 
29.8.12IotaY 
29.8.13Greatest common divisorY 
29.8.14Least common multipleY 
29.9Mathematical functions for floating-point types  
29.9.1Header<cmath> synopsis  
29.9.2Absolute valuesY 
29.9.3Three-dimensional hypotenuseY 
29.9.4Classification / comparison functionsY 
29.9.5Mathematical special functionsY 
30Input/output library
30.1GeneralY 
30.2Iostreams requirementsY 
30.2.1Imbue LimitationsY 
30.2.2Positioning Type LimitationsY 
30.2.3Thread safetyPartial 
30.3Forward declarationsY 
30.4Standard iostream objectsY 
30.5Iostreams base classesY 
30.6Stream buffersY 
30.7Formatting and manipulatorsY 
30.8String-based streamsY 
30.9File-based streamsY 
30.10File systemssY 
30.11C library filesY 
31Regular expressions
31.1GeneralY 
31.2DefinitionsY 
31.3RequirementsY 
31.4Header<regex> synopsisY 
31.5Namespacestd::regex_constantsY 
31.6Classregex_errorY 
31.7Class templateregex_traitsPartialtransform_primary is not correctly implemented
31.8Class templatebasic_regexY 
31.9Class templatesub_matchY 
31.10Class templatematch_resultsY 
31.11Regular expression algorithmsY 
31.12Regular expression IteratorsY 
31.13Modified ECMAScript regular expression grammarY 
32Atomic operations
32.1GeneralY 
32.2Header<atomic> synopsisY 
32.3Type aliasesY 
32.4Order and consistencyY 
32.5Lock-free propertyY 
32.6Class template<atomic>Y 
32.7Non-member functionsY 
32.8Flag Type and operationsY 
32.9FencesY 
33Thread support
33.1GeneralY 
33.2RequirementsY 
33.3Threads  
33.3.1Headerthread synopsis  
33.3.2ClassthreadY 
33.3.2.1ClassthreadPartialthread::id comparisons not well-defined
33.3.3Namespacethis_threadY 
33.4Mutual exclusion  
33.4.3Mutex requirements  
33.4.3.1In general  
33.4.3.2Mutex types  
33.4.3.2.1ClassmutexY 
33.4.3.2.2Classrecursive_mutexY 
33.4.3.3Timed mutex types  
33.4.3.3.1Classtimed_mutexY 
33.4.3.3.2Classrecursive_timed_mutexY 
33.4.3.4Shared mutex types  
33.4.3.4.1Classshared_mutexY 
33.4.3.5Shared timed mutex types  
33.4.3.5.1Classshared_timed_mutexY 
33.4.4Locks  
33.4.4.1Class templatelock_guardY 
33.4.4.2Class templatescoped_guardY 
33.4.4.3Class templateunique_lockY 
33.4.4.4Class templateshared_lockY 
33.4.5Generic locking algorithmsY 
33.4.6Call once  
33.4.6.1Structonce_flagY 
33.4.6.2Functioncall_onceYException support is broken.SeePR66146.
33.5Condition variablesY 
33.5.1Classcondition_variableY 
33.5.2Classcondition_variable_anyY 
33.6Futures  
33.6.1Overview  
33.6.2Header<future>  
33.6.3Error handlingY 
33.6.4Classfuture_errorY 
33.6.5Shared stateY 
33.6.6Class templatepromiseY 
33.6.7Class templatefutureY 
33.6.8Class templateshared_futureY 
33.6.9Function templateasyncY 
33.6.10Class templatepackaged_taskY 
Appendix DCompatibility features
D.4C++ standard library headersY 
D.4.1Header<ccomplex> synopsisY 
D.4.1Header<cstdalign> synopsisY 
D.4.1Header<cstdbool> synopsisY 
D.4.1Header<ctgmath> synopsisY 
D.5C standard library headersY 
D.6char* streamsY 
D.7uncaught_exceptionY 
D.8Old adaptable function bindingsY 
D.9The default allocatorY 
D.10Raw storage iteratorY 
D.11Temporary buffersY 
D.12Deprecated type traitsY 
D.13Deprecated iterator primitivesY 
D.14Deprecatedshared_ptr observersY 
D.15Deprecated standard code conversion facetsY 
D.16Deprecated convenience conversion interfacesY 

Table 1.7. C++ Technical Specifications Implementation Status

PaperTitleStatusComments
N4076A generalized callable negatorYLibrary Fundamentals 2 TS
N4273Uniform Container ErasureYLibrary Fundamentals 2 TS
N4061Greatest Common Divisor and Least Common MultipleYLibrary Fundamentals 2 TS
N4066Delimited iteratorsYLibrary Fundamentals 2 TS
N4282The World's Dumbest Smart PointerYLibrary Fundamentals 2 TS
N4388Const-Propagating WrapperYLibrary Fundamentals 2 TS
N4391make_array, revision 4YLibrary Fundamentals 2 TS
N4502 Support for the C++ Detection Idiom, V2YLibrary Fundamentals 2 TS
N4519 Source-Code Information CaptureYLibrary Fundamentals 2 TS
N4521 Merge Fundamentals V1 into V2 N (components from V1 are still in namespacefundamentals_v1)Library Fundamentals 2 TS
P0013R1Logical Operator Type Traits (revision 1)YLibrary Fundamentals 2 TS
N4531std::rand replacement, revision 3YLibrary Fundamentals 2 TS
P0214R9Data-Parallel TypesYParallelism 2 TS

Implementation Specific Behavior

For behaviour which is also specified by previous standards, seeC++ 1998/2003 Implementation Specific Behavior andC++ 2011 Implementation Specific Behavior. This section only documents behaviour which is new in the 2017 standard.

20.5.1.2 [headers] Whether names from Annex K are declared by C++ headers depends on whether the underlying C library supports Annex K and declares the names. For the GNU C library, there is no Annex K support and so none of its names are declared by C++ headers.

23.6.5 [optional.bad_optional_access]what() returns"bad optional access".

23.7.3 [variant.variant]variant supports over-aligned types.

23.7.10 [variant.bad.access]what() returns one of the strings"std::get: variant is valueless","std::get: wrong index for variant","std::visit: variant is valueless", or"std::visit<R>: variant is valueless".

23.8.2 [any.bad_any_cast]what() returns"bad any_cast".

23.12.5 [mem.res.pool.options],23.12.5 [mem.res.pool.mem] Let S equalnumeric_limits<size_t>::digits. The limit for maximum number of blocks in a chunk is given by2N-1, where N ismin(19, 3 + S/2). The largest allocation size that will be allocated from a pool is222 whenS > 20, otherwise 3072 whenS > 16, otherwise 768.

23.12.6.1 [mem.res.monotonic.buffer.ctor] The defaultnext_buffer_size is128 * sizeof(void*). The default growth factor is1.5.

23.15.4.3 [meta.unary.prop] The predicate condition forhas_unique_object_representations is true for all scalar types except floating point types.

23.19.3 [execpol.type], 28.4.3 [algorithms.parallel.exec] There are no implementation-defined execution policies.

24.4.2 [string.view.template]basic_string_view<C, T>::iterator isC* andbasic_string_view<C, T>::const_iterator isconst C*.

28.4.3 [algorithms.parallel.exec] Threads of execution created bystd::thread provide concurrent forward progress guarantees, so threads of execution implicitly created by the library will provide parallel forward progress guarantees.

29.4.1 [cfenv.syn] The effects of the<cfenv> functions depends on whether theFENV_ACCESS pragma is supported, and on the C library that provides the header.

29.6.9 [c.math.rand] Whether therand function may introduce data races depends on the target C library that provides the function.

29.9.5 [sf.cmath] Calling the mathematical special functions with large inputs is supported but the results may be imprecise.

30.7.5.2.3 [ostream.inserters] NTCTS fornullptr_t is"nullptr".

30.10.2.1 [fs.conform.9945],30.10.2.2 [fs.conform.os] 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.

30.10.5 [fs.filesystem.syn] The clock used for file times is an unspecified type with a signed 64-bit representation, capable of representing timestamps with nanosecond resolution. The clock's epoch is unspecified, but is not the same as the system clock's epoch.

30.10.7.1 [fs.path.generic] dot-dot in the root-directory refers to the root-directory itself. On Windows, a drive specifier such as"C:" or"z:" is treated as a root-name. On Cygwin, a path that begins with two successive directory separators is a root-name. Otherwise (for POSIX-like systems other than Cygwin), the implementation-defined root-name is an unspecified string which does not appear in any pathnames.

30.10.10.1 [fs.enum.path.format] The character sequence is always interpreted in the native pathname format.

30.10.15.4 [fs.op.file_size] If!is_regular_file(p), an error is reported.

30.10.15.32 [fs.op.rename] On Windows,filesystem::rename is implemented by callingMoveFileExW and so does not meet the requirements of POSIXrename when one or both of the paths resolves to an existing directory. Specifically, it is not possible to rename a directory to replace another directory (POSIX requires that to work if the directory being replaced is empty).

30.10.29.2 [fs.enum.file_type],30.10.34.3 [fs.op.copy],30.10.34.35 [fs.op.status] No additional file types are supported, and there are no implementation-defined enumerators instd::filesystem::file_type.

30.10.32 [fs.class.directory_iterator],30.10.33 [fs.class.rec.dir.itr] Any directory-like file types supported byopendir/readdir (or_wopendir/_wreaddir on Windows).

Parallelism 2 TS

9.3 [parallel.simd.abi]max_fixed_size<T> is 32, except when targetting AVX512BW andsizeof(T) is 1.

When targeting 32-bit x86,simd_abi::compatible<T> is an alias forsimd_abi::scalar. When targeting 64-bit x86 (including x32) or Aarch64,simd_abi::compatible<T> is an alias forsimd_abi::_VecBuiltin<16>, unlessT islong double, in which case it is an alias forsimd_abi::scalar. When targeting ARM (but not Aarch64) with NEON support,simd_abi::compatible<T> is an alias forsimd_abi::_VecBuiltin<16>, unlesssizeof(T) > 4, in which case it is an alias forsimd_abi::scalar. Additionally,simd_abi::compatible<float> is an alias forsimd_abi::scalar unless compiling with -ffast-math.

When targeting x86 (both 32-bit and 64-bit),simd_abi::native<T> is an alias for one ofsimd_abi::scalar,simd_abi::_VecBuiltin<16>,simd_abi::_VecBuiltin<32>, orsimd_abi::_VecBltnBtmsk<64>, depending onT and the machine options the compiler was invoked with.

When targeting ARM/Aarch64 or POWER,simd_abi::native<T> is an alias forsimd_abi::scalar orsimd_abi::_VecBuiltin<16>, depending onT and the machine options the compiler was invoked with.

For any other targeted machinesimd_abi::compatible<T> andsimd_abi::native<T> are aliases forsimd_abi::scalar. (subject to change)

The extended ABI tag types defined in thestd::experimental::parallelism_v2::simd_abi namespace are:simd_abi::_VecBuiltin<Bytes>, andsimd_abi::_VecBltnBtmsk<Bytes>.

simd_abi::deduce<T, N, Abis...>::type, withN > 1 is an alias for an extended ABI tag, if a supported extended ABI tag exists. Otherwise it is an alias forsimd_abi::fixed_size<N>. The simd_abi::_VecBltnBtmsk ABI tag is preferred oversimd_abi::_VecBuiltin.

9.4 [parallel.simd.traits]memory_alignment<T, U>::value issizeof(U) * T::size() rounded up to the next power-of-two value.

9.6.1 [parallel.simd.overview] On ARM,simd<T, _VecBuiltin<Bytes>> is supported if__ARM_NEON is defined andsizeof(T) <= 4. Additionally,sizeof(T) == 8 with integralT is supported if__ARM_ARCH >= 8, anddouble is supported if__aarch64__ is defined. On POWER,simd<T, _VecBuiltin<Bytes>> is supported if__ALTIVEC__ is defined andsizeof(T) < 8. Additionally,double is supported if__VSX__ is defined, and anyT with sizeof(T) <= 8 is supported if__POWER8_VECTOR__ is defined. On x86, given an extended ABI tagAbi,simd<T, Abi> is supported according to the following table:

Table 1.8. Support for Extended ABI Tags

ABI tagAbivalue typeTvalues forBytesrequired machine option
_VecBuiltin<Bytes>float8, 12, 16"-msse"
20, 24, 28, 32"-mavx"
double16"-msse2"
24, 32"-mavx"
integral types other thanboolBytes ≤ 16 andBytes divisible bysizeof(T)"-msse2"
16 <Bytes ≤ 32 andBytes divisible bysizeof(T)"-mavx2"
_VecBuiltin<Bytes> and_VecBltnBtmsk<Bytes> vectorizable types withsizeof(T) ≥ 4 32 <Bytes ≤ 64 andBytes divisible bysizeof(T)"-mavx512f"
vectorizable types withsizeof(T) < 4"-mavx512bw"
_VecBltnBtmsk<Bytes> vectorizable types withsizeof(T) ≥ 4Bytes ≤ 32 andBytes divisible bysizeof(T)"-mavx512vl"
vectorizable types withsizeof(T) < 4"-mavx512bw" and "-mavx512vl"


C++ 2020

In this implementation the-std=gnu++20 or-std=c++20 flag must be used to enable languageand libraryfeatures. Seedialectoptions. The pre-defined symbol__cplusplus is used to check for thepresence of the required flag.

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

The following table lists new library features that are included inthe C++20 standard. The "Proposal" column provides a link to theISO C++ committee proposal that describes the feature, while the "Status"column indicates the first version of GCC that contains an implementation ofthis feature (if it has been implemented).A dash (—) in the status column indicates that the changes in the proposaleither do not affect the code in libstdc++, or the changes are not required for conformance.The "SD-6 Feature Test / Notes" column shows the corresponding macro or header fromSD-6:Feature-testing recommendations for C++ (where applicable)or any notes about the implementation.

Table 1.9. C++ 2020 Library Features

Library FeatureProposalStatusSD-6 Feature Test / Notes
Compile-time programming
Add constexpr modifiers to functions in<algorithm> and<utility> Headers P0202R3 10.1__cpp_lib_constexpr_algorithms >= 201703L
Constexpr forswap and swap related functions P0879R0 10.1__cpp_lib_constexpr_algorithms >= 201806L
Constexpr forstd::complex P0415R1 9.1__cpp_lib_constexpr_complex >= 201711L (since 9.4, see Note 1)
std::is_constant_evaluated() P0595R2 9.1__cpp_lib_is_constant_evaluated >= 201811L
More constexpr containers P0784R7 10.1__cpp_lib_constexpr_dynamic_alloc >= 201907L
Makingstd::string constexpr P0980R1 12.1__cpp_lib_constexpr_string >= 201907L
Makingstd::vector constexpr P1004R2 12.1__cpp_lib_constexpr_vector >= 201907L
Constexpr instd::pointer_traits P1006R1 9.1__cpp_lib_constexpr_memory >= 201811L (since 9.4, see Note 1)
constexpr for<numeric> algorithms P1645R1 10.1__cpp_lib_constexpr_numeric >= 201911L
Constexpr iterator requirements P0858R0 9.1
__cpp_lib_array_constexpr >= 201803L
__cpp_lib_string_view >= 201803L
(both since 9.4, see Note 1)
constexpr comparison operators forstd::array P1023R0 10.1__cpp_lib_array_constexpr >= 201806
Misc constexpr bits P1032R1 10.1
__cpp_lib_array_constexpr >= 201811L
__cpp_lib_constexpr_functional >= 201811L
__cpp_lib_constexpr_iterator >= 201811L
__cpp_lib_constexpr_string_view >= 201811L
__cpp_lib_constexpr_tuple >= 201811L
__cpp_lib_constexpr_utility >= 201811L
constexprINVOKE P1065R2 10.1__cpp_lib_constexpr_functional >= 201907L
Transformation Traitremove_cvref P0550R2 9.1__cpp_lib_remove_cvref >= 201711L (since 9.4, see Note 1)
Implicit conversion traits and utility functions P0758R1 9.1__cpp_lib_is_nothrow_convertible >= 201806L (since 9.4, see Note 1)
Theidentity metafunction P0887R1 9.1__cpp_lib_type_identity >= 201806L (since 9.4, see Note 1)
unwrap_ref_decay andunwrap_reference P0318R1 9.1__cpp_lib_unwrap_ref >= 201811L (since 9.4, see Note 1)
Improving Completeness Requirements for Type Traits P1285R0 Most misuses are diagnosed, but not all.
Missing feature test macros P1353R0 9.1 
Making std::underlying_type SFINAE-friendly P0340R3 9.1 
Traits for [Un]bounded Arrays P1357R1 9.1__cpp_lib_bounded_array_traits >= 201902L
Layout-compatibility and pointer-interconvertibility traits P0466R5 12.1
__cpp_lib_is_layout_compatible >= 201907L
__cpp_lib_is_pointer_interconvertible >= 201907L
Integrating feature-test macros into the C++ WD P0941R2 5.1 
<version> P0754R2 9.1__has_include(<version>)
Synchronization
Atomic Ref P0019R8 10.1__cpp_lib_atomic_ref >= 201806L
Floating Point Atomic P0020R6 10.1__cpp_lib_atomic_float >= 201711L
C++ Synchronized Buffered Ostream P0053R7 11.1__cpp_lib_syncbuf >= 201711L
Manipulators for C++ Synchronized Buffered Ostream P0753R2 11.1__cpp_lib_syncbuf >= 201803L
Makestd::memory_order a scoped enumeration P0439R0 9.1 
The Curious Case of Padding Bits, Featuring Atomic Compare-and-Exchange P0528R3 13.1 
Atomicshared_ptr P0718R2 12.1 __cpp_lib_atomic_shared_ptr >= 201711L
std::stop_token and std::jthread P0660R10 10.1__cpp_lib_jthread >= 201907L
Renamecondition_variable_any interruptible wait methods P1869R1 10.1__cpp_lib_jthread >= 201911L
Atomic waiting and notifying, std::semaphore, std::latch and std::barrier P1135R6 11.1
__cpp_lib_atomic_lock_free_type_aliases >= 201907L
__cpp_lib_atomic_flag_test >= 201907L
__cpp_lib_atomic_wait >= 201907L
__cpp_lib_semaphore >= 201907L
__cpp_lib_latch >= 201907L
__cpp_lib_barrier >= 201907L
Fixing Atomic Initialization P0883R2 10.1__cpp_lib_atomic_value_initialization >= 201911L
Ranges and Concepts
Standard Library Concepts P0898R3 10.1__cpp_lib_concepts >= 201806L
Rename concepts to standard_case for C++20, while we still can P1754R1 10.1__cpp_lib_concepts >= 201907L
Wording forboolean-testable P1964R2 10.1__cpp_lib_concepts >= 202002L
The One Ranges Proposal P0896R4 10.1__cpp_lib_ranges >= 201811L
Input Range Adaptors P1035R7 10.1__cpp_lib_ranges >= 201907L
ranges compare algorithm are over-constrained P1716R3 10.1__cpp_lib_ranges >= 201911L
Remove CommonReference requirement from StrictWeakOrdering (a.k.a Fixing Relations) P1248R1 10.1 
Ranges Design Cleanup P1252R2 10.1 
Avoid template bloat forsafe_ranges in combination with ‘subrange-y’ view adaptors. P1739R4 12.1 
Time, dates, calendars, time zones
Extending chrono to Calendars and Time Zones P0355R7 14.1 (see Note 2)__cpp_lib_chrono >= 201803L
Miscellaneous minor fixes for chrono P1466R3 11.1 (see Note 2)__cpp_lib_chrono >= 201907L
<chrono>zero(),min(), andmax() should benoexcept P0972R0 9.1 
Three-way comparison
Library Support for the Spaceship (Comparison) Operator P0768R1 10.1__cpp_lib_three_way_comparison >= 201711L
Symmetry for spaceship P0905R1 10.1 
Adding <=> to the standard library P1614R2 10.1__cpp_lib_three_way_comparison >= 201907L
Strings and text
string::reserve Should Not Shrink P0966R1 11.1 
char8_t: A type for UTF-8 characters and strings P0482R6 9.1__cpp_lib_char8_t >= 201811L
char8_t backward compatibility remediation P1423R3 10.1__cpp_lib_char8_t >= 201907L
Text formatting P0645R10 13.1__cpp_lib_format >= 201907L
Integration of chrono with text formatting P1361R2 13.1__cpp_lib_format >= 201907L
Printf corner cases instd::format P1652R1 13.1__cpp_lib_format >= 201907L
String Prefix and Suffix Checking P0457R2 9.1__cpp_lib_starts_ends_with >= 201711L (since 9.4, see Note 1)
Update The Reference To The Unicode Standard P1025R1 
Containers
span: bounds-safe views for sequences of objects P0122R7 10.1__cpp_lib_span >= 201803L
Usability Enhancements forstd::span P1024R3 10.1__cpp_lib_span >= 201902L
Should Span be Regular? P1085R2 10.1 
Fixed-size<span> construction from dynamic range P1976R2 10.1__cpp_lib_span >= 202002L
std::to_array P0325R4 10.1__cpp_lib_to_array >= 201907L
Checking for Existence of an Element in Associative Containers P0458R2 9.1 
Comparing Unordered Containers P0809R0 
Heterogeneous lookup for unordered containers P0919R3 11.1__cpp_lib_generic_unordered_lookup >= 201811
Refinement Proposal for P0919 P1690R1 11.1 
Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20 P1209R0 9.1__cpp_lib_erase_if >= 201811L
Improving the Return Value of Erase-Like Algorithms P0646R1 9.1__cpp_lib_list_remove_return_type >= 201806L
Improving the Return Value of Erase-Like Algorithms II: Freeerase/erase_if P1115R3 9.1
__cpp_lib_erase_if >= 202002L
(defined to201900L for GCC 9.1 and 9.2 so use> 201811L)
Signed ssize() functions, unsigned size() functions P1227R2 10.1__cpp_lib_ssize >= 201902L
Memory management
Utility to convert a pointer to a raw pointer P0653R2 8.1__cpp_lib_to_address >= 201711L (since 9.4, see Note 1)
Extendingmake_shared to Support Arrays P0674R1 12.1__cpp_lib_shared_ptr_arrays >= 201707L
Efficient sized delete for variable sized classes P0722R3 9.1__cpp_lib_destroying_delete >= 201806L
Utility functions to implement uses-allocator construction P0591R4 9.1std::scoped_allocator_adaptor changes missing in 9.1.0
std::assume_aligned P1007R3 9.1__cpp_lib_assume_aligned >= 201811L (since 9.4, see Note 1)
Smart pointer creation with default initialization P1020R1 12.1__cpp_lib_smart_ptr_for_overwrite >= 201811L
Rename "default_init" Functions P1973R1 12.1__cpp_lib_smart_ptr_for_overwrite >= 201811L
Make stateful allocator propagation more consistent foroperator+(basic_string) P1165R1 10.1 
polymorphic_allocator<> as a vocabulary type P0339R6 9.1__cpp_lib_polymorphic_allocator >= 201902L (since 9.4, see Note 1)
LWG 2511: guaranteed copy elision for piecewise construction P0475R1 7.1 
Miscellaneous
nodiscard in the Library P0600R1 9.1 
de-pessimize legacy algorithms withstd::move P0616R0 9.1 
Deprecate POD P0767R1 10.1 
Treating Unnecessarydecay P0777R1 9.1 
Thou Shalt Not Specialize std Function Templates! P0551R3These changes will not be implemented.
Bit-casting object representations P0476R2 11.1__cpp_lib_bit_cast >= 201806L
Integral power-of-2 operations P0556R3 9.1__cpp_lib_int_pow2 >= 201806L (since 9.4, see Note 1)
On the names of low-level bit manipulation functions P1956R1 10.1__cpp_lib_int_pow2 >= 202002L
Safe integral comparisons P0586R2 10.1__cpp_lib_integer_comparison_functions >= 202002L
Reviewing Deprecated Facilities of C++17 for C++20 P0619R4 12.1 
fpos Requirements P0759R1 
Addshift to<algorithm> P0769R2 10.1__cpp_lib_shift >= 201806L
Standard Library Specification in a Concepts and Contracts World P0788R3 
explicit(bool) P0892R2 
Eradicating unnecessarily explicit default constructors from the standard library P0935R0 9.1 
std::function move constructor should benoexcept P0771R1 7.2 
Simplified partial function application P0356R5 9.1__cpp_lib_bind_front >= 201811L
bind_front should not unwrapreference_wrapper P1651R0 9.3__cpp_lib_bind_front >= 201907L
reference_wrapper for incomplete types P0357R3 9.1 
Fixingoperator>>(basic_istream&, CharT*) (LWG 2499) P0487R1 11.1 
variant andoptional should propagate copy/move triviality P0602R4 8.3 
A sanevariant converting constructor P0608R3 10.1 
visit<R>: Explicit Return Type forvisit P0655R1 9.1 
P0899R1 - LWG 3016 is not a defect P0899R1 7.1 
Editorial Guidance for merging P0019r8 and P0528r3 P1123R0 
Cleaning up Clause 20 P1148R0 
Completing the Rebase of Library Fundamentals, Version 3, Working Draft P1210R0 
Alternative Wording for P0907R4 Signed Integers are Two's Complement P1236R1 
I Stream, You Stream, We All Stream foristream_iterator P0738R2 10.1 
Mandating the Standard Library: Clause 16 - Language support library P1458R1 
Mandating the Standard Library: Clause 18 - Diagnostics library P1459R1 
Mandating the Standard Library: Clause 20 - Strings library P1462R1 
Mandating the Standard Library: Clause 21 - Containers library P1463R1 10.1 
Mandating the Standard Library: Clause 22 - Iterators library P1464R1 
Makecreate_directory() Intuitive P1164R1 8.3 Treated as a DR for C++17
Target Vectorization Policies from Parallelism V2 TS to C++20 P1001R2 9.1__cpp_lib_execution >= 201902L (since 9.4, see Note 1)
Merge Coroutines TS into C++20 working draft P0912R5 10.1__cpp_lib_coroutines >= 201902L
Endian just Endian P0463R1 8.1__cpp_lib_endian >= 201907L
Bit operations P0553R4 9.1__cpp_lib_bitops >= 201907L (since 9.4, see Note 1)
Well-behaved interpolation for numbers and pointers P0811R3 9.1__cpp_lib_interpolate >= 201902L
Mathematical constants P0631R8 10.1__cpp_lib_math_constants >= 201907L
std::source_location P1208R6 11.1__cpp_lib_source_location >= 201907L
Efficient access to std::basic_stringbuf's Buffer P0408R7 11.1 

Note 1: This feature is supported in older releases but the__cpp_lib macro is not defined to the right value(or not defined at all) until the version shown in parentheses.

Note 2: The C++20 calendar types are supported since 11.1,time zones and UTC are supported since 13.1,andchrono::parse is supported since 14.1.

The following status table is based on the table of contents ofISO/IEC 14882:2020.Some subclauses are not shown in the table where the content is unchangedsince C++17 and the implementation is complete.

Table 1.10. C++ 2020 Implementation Status

SectionDescriptionStatusComments
17Language support library
17.1General  
17.2Common definitions  
17.2.1Header<cstddef> synopsisY 
17.2.2Header<cstdlib> synopsisY 
17.2.3Null pointersY 
17.2.4Sizes, alignments, and offsetsY 
17.2.5byte type operationsY 
17.3Implementation properties  
17.3.1General  
17.3.2Header<version> synopsisY 
17.3.3Header<limits> synopsisY 
17.3.4Floating-point type properties  
17.3.4.1Typefloat_round_styleN 
17.3.4.2Typefloat_denorm_styleN 
17.3.5Class templatenumeric_limitsY 
17.3.6Header<climits> synopsisY 
17.3.7Header<cfloat> synopsisY 
17.4Integer types  
17.4.1General  
17.4.2Header<cstdint> synopsisY 
17.5Startup and terminationPartialC library dependency for quick_exit, at_quick_exit
17.6Dynamic memory managementY 
17.7Type identificationY 
17.8Source location  
17.8.1Header<source_location> synopsisY 
17.8.2Classsource_locationY 
17.9Exception handlingY 
17.10Initializer listsY 
17.11Comparisons  
17.11.1Header<compare> synopsisY 
17.11.2Comparison category typesY 
17.11.3Class templatecommon_comparison_categoryY 
17.11.4Conceptthree_way_comparableY 
17.11.5Result of three-way comparisonY 
17.11.6Comparison algorithmsY 
17.12Coroutines  
17.12.1General  
17.12.2Header<coroutine> synopsisY 
17.12.3Coroutine traitsY 
17.12.4Class templatecoroutine_handleY 
17.12.5No-op coroutinesY 
17.13Other runtime supportY 
18Concepts library
18.1General  
18.2Equality preservation  
18.3Header<concepts> synopsisY 
18.4Language-related concepts  
18.4.1General  
18.4.2Conceptsame_asY 
18.4.3Conceptderived_fromY 
18.4.4Conceptconvertible_toY 
18.4.5Conceptcommon_reference_withY 
18.4.6Conceptcommon_withY 
18.4.7Arithmetic concepts  
18.4.8Conceptassignable_fromY 
18.4.9ConceptswappableY 
18.4.10ConceptdestructibleY 
18.4.11Conceptconstructible_fromY 
18.4.12Conceptdefault_initializableY 
18.4.13Conceptmove_constructibleY 
18.4.14Conceptcopy_constructibleY 
18.5Comparison concepts  
18.5.1General  
18.5.2Boolean testabilityY 
18.5.3Conceptequality_comparableY 
18.5.4Concepttotally_orderedY 
18.6Object conceptsY 
18.7Callable concepts  
18.7.1General  
18.7.2ConceptinvocableY 
18.7.3Conceptregular_invocableY 
18.7.4ConceptpredicateY 
18.7.5ConceptrelationY 
18.7.6Conceptequivalence_relationY 
18.7.7Conceptstrict_weak_orderY 
19Diagnostics library
19.1General  
19.2Exception classesY 
19.3AssertionsY 
19.4Error numbersY 
19.5System error support  
19.5.1General  
19.5.2Header<system_error> synopsisY 
19.5.3Classerror_categoryY 
19.5.4Classerror_codeY 
19.5.5Classerror_conditionY 
19.5.6Comparison operator functionsY 
19.5.7System error hash supportY 
19.5.8Classsystem_errorY 
20General utilities library
20.1General  
20.2Utility components  
20.2.1Header<utility> synopsisY 
20.2.2swapY 
20.2.3exchangeY 
20.2.4Forward/move helpersY 
20.2.5Function templateas_constY 
20.2.6Function templatedeclvalY 
20.2.7Integer comparison functionsY 
20.3Compile-time integer sequencesY 
20.4PairsY 
20.5TuplesY 
20.6Optional objectsY 
20.7VariantsY 
20.8Storage for any typeY 
20.9BitsetsY 
20.10MemoryY 
20.11Smart pointers  
20.11.1Class templateunique_ptrY 
20.11.2Classbad_weak_ptrY 
20.11.3Class templateshared_ptrYUses code from boost::shared_ptr.
20.11.4Class templateweak_ptrY 
20.11.5Class templateowner_lessY 
20.11.6Class templateenable_shared_from_thisY 
20.11.7Smart pointer hash supportY 
20.12Memory resources  
20.12.1Header<memory_resource> synopsisY 
20.12.2Classmemory_resourceY 
20.12.3Class templatepolymorphic_allocatorY 
20.12.4Access to program-widememory_resource objectsY 
20.12.5Pool resource classesY 
20.12.6Classmonotonic_buffer_resourceY 
20.13Class templatescoped_allocator_adaptorY 
20.14Function objects  
20.14.1General  
20.14.2Header<functional> synopsisY 
20.14.3Definitions  
20.14.4Requirements  
20.14.5Function templateinvokeY 
20.14.6Class templatereference_wrapperY 
20.14.7Arithmetic operationsY 
20.14.8ComparisonsY 
20.14.9Concept-constrained comparisonsY 
20.14.10Logical operationsY 
20.14.11Bitwise operationsY 
20.14.12ClassidentityY 
20.14.13Function templatenot_fnY 
20.14.14Function templatebind_frontY 
20.14.15Function object bindersY 
20.14.16Function templatemem_fnY 
20.14.17Polymorphic function wrappers  
20.14.17.1General  
20.14.17.2Classbad_function_callY 
20.14.17.3Class templatefunctionY 
20.14.18SearchersY 
20.15Metaprogramming and type traits  
20.15.1General  
20.15.2RequirementsY 
20.15.3Header<type_traits> synopsisY 
20.15.4Helper classesY 
20.15.5Unary type traitsY 
20.15.6Type property queriesY 
20.15.7Relationships between typesY 
20.15.8Transformations between typesY 
20.15.9Logical operator traitsY 
20.15.10Member relationshipsY 
20.15.11Constant evaluation contextY 
20.16Compile-time rational arithmeticY 
20.17Classtype_indexY 
20.18Execution policiesY 
20.19Primitive numeric conversions  
20.19.1Header<charconv> synopsisY 
20.19.2Primitive numeric output conversionY Floating-point types up to 64-bit are formatted usingRyu.Types with greater precision are formatted using the C library(sprintf and conditionallystrfromf128).For powerpc64le-unknown-linux-gnu__sprintfieee128must be provided by Glibc.
20.19.3Primitive numeric input conversionYFloating-point types up to 64-bit are parsed usingfast_float.Types with greater precision are parsed using the C library(strtold).For powerpc64le-unknown-linux-gnu__strtoieee128must be provided by Glibc.
20.20Formatting  
20.20.1Header<format> synopsisY 
20.20.2Format string  
20.20.2.1 In generalY 
20.20.2.2Standard format specifiersY 
20.20.3Error reportingY 
20.20.4Formatting functionsY 
20.20.5FormatterY 
20.20.5.1Formatter requirements  
20.20.5.2Formatter specializationsY 
20.20.5.3Class templatebasic_format_parse_contextY 
20.20.5.4Class templatebasic_format_contextY 
20.20.6Arguments  
20.20.6.1Class templatebasic_format_argY 
20.20.6.2Class templateformat-arg-storeY 
20.20.6.3Class templatebasic_format_argsY 
20.20.7Classformat_errorY 
21Strings library
21.1General  
21.2Character traitsY 
21.3String classesY 
21.4String view classesY 
21.5Null-terminated sequence utilitiesPartialC library dependency.
22Containers library
22.1General  
22.2Container requirementsY 
22.3Sequence containersY 
22.4Associative containersY 
22.5Unordered associative containersY 
22.6Container adaptorsY 
22.7Views  
22.7.1General  
22.7.2Header<span> synopsisY 
22.7.3Class templatespanY 
23Iterators library
23.1General  
23.2Header<iterator> synopsisY 
23.3Iterator requirements  
23.3.1In generalY 
23.3.2Associated typesY 
23.3.3Customization pointsY 
23.3.4Iterator conceptsY 
23.3.5C++17 iterator requirementsY 
23.3.6Indirect callable requirementsY 
23.3.7Common algorithm requirementsY 
23.4Iterator primitives  
23.4.1General  
23.4.2Standard iterator tagsY 
23.4.3Iterator operationsY 
23.4.4Range iterator operationsY 
23.5Iterator adaptors  
23.5.1Reverse iteratorsY 
23.5.2Insert iteratorsY 
23.5.3Move iterators and sentinelsY 
23.5.4Common iteratorsY 
23.5.5Default sentinelY 
23.5.6Counted iteratorsY 
23.5.7 Unreachable sentinelY 
23.6 Stream iteratorsY 
23.6.1General  
23.6.2 Class templateistream_iteratorY 
23.6.3Class templateostream_iteratorY 
23.6.4Class templateistreambuf_iteratorY 
23.6.5Class templateostreambuf_iteratorY 
23.7Range accessY 
24Ranges library
24.1General  
24.2Header<ranges> synopsisY 
24.3Range accessY 
24.4Range requirements  
24.4.1General  
24.4.2RangesY 
24.4.3Sized rangesY 
24.4.4ViewsY 
24.4.5Other range refinementsY 
24.5Range utilities  
24.5.1General  
24.5.2Helper conceptsY 
24.5.3View interfaceY 
24.5.4Sub-rangesY 
24.5.5Dangling iterator handlingY 
24.6Range factories  
24.6.1General  
24.6.2Empty viewY 
24.6.3Single viewY 
24.6.4Iota viewY 
24.6.5Istream viewY 
24.7Range adaptors  
24.7.1General  
24.7.2Range adaptor objectsY 
24.7.3Semiregular wrapperY 
24.7.4All viewY 
24.7.5Filter viewY 
24.7.6Transform viewY 
24.7.7Take viewY 
24.7.8Take while viewY 
24.7.9Drop viewY 
24.7.10Drop while viewY 
24.7.11Join viewY 
24.7.12Split viewY 
24.7.13Counted viewY 
24.7.14Common viewY 
24.7.15Reverse viewY 
24.7.16Elements viewY 
25Algorithms library
25.1General  
25.2Algorithms requirementsY 
25.3Parallel algorithms Uses code fromoneDPL
25.4Header<algorithm> synopsisY 
25.5Algorithm result typesY 
25.6Non-modifying sequence operations  
25.6.1All ofY 
25.6.2Any ofY 
25.6.3None ofY 
25.6.4For eachY 
25.6.5FindY 
25.6.6Find endY 
25.6.7Find firstY 
25.6.8Adjacent findY 
25.6.9CountY 
25.6.10MismatchY 
25.6.11EqualY 
25.6.12Is permutationY 
25.6.13SearchY 
25.7Mutating sequence operations  
25.7.1CopyY 
25.7.2MoveY 
25.7.3SwapY 
25.7.4TransformY 
25.7.5ReplaceY 
25.7.6FillY 
25.7.7GenerateY 
25.7.8RemoveY 
25.7.9UniqueY 
25.7.10ReverseY 
25.7.11RotateY 
25.7.12SampleY 
25.7.13ShuffleY 
25.7.14ShiftY 
25.8Sorting and related operations  
25.8.1GeneralY 
25.8.2SortingY 
25.8.3Nth elementY 
25.8.4Binary searchY 
25.8.5PartitionsY 
25.8.6MergeY 
25.8.7Set operations on sorted structuresY 
25.8.8Heap operationsY 
25.8.9Minimum and maximumY 
25.8.10Bounded valueY 
25.8.11Lexicographical comparisonY 
25.8.12Three-way comparison algorithmsY 
25.8.13Permutation generatorsY 
25.9Header<numeric> synopsisY 
25.10Generalized numeric operations  
25.10.1General  
25.10.2Definitions  
25.10.3AccumulateY 
25.10.4ReduceY 
25.10.5Inner productY 
25.10.6Transform reduceY 
25.10.7Partial sumY 
25.10.8Exclusive scanY 
25.10.9Inclusive scanY 
25.10.10Transform exclusive scanY 
25.10.11Transform inclusive scanY 
25.10.12Adjacent differenceY 
25.10.13IotaY 
25.10.14Greatest common divisorY 
25.10.15Least common multipleY 
25.10.16MidpointY 
25.11Specialized<memory> algorithms  
25.11.1General  
25.11.2Special memory conceptsY 
25.11.3uninitialized_default_constructY 
25.11.4uninitialized_value_constructY 
25.11.5uninitialized_copyY 
25.11.6uninitialized_moveY 
25.11.7uninitialized_fillY 
25.11.8construct_atY 
25.11.9destroyY 
25.12C library algorithmsY 
26Numerics library
26.1General  
26.2Numeric type requirementsY 
26.3The floating-point environmentY 
26.4Complex numbersY 
26.5Bit manipulation  
26.5.1General  
26.5.2Header<bit> synopsisY 
26.5.3Function templatebit_castY 
26.5.4Integral powers of 2Y 
26.5.5RotatingY 
26.5.6CountingY 
26.5.7EndianY 
26.6Random number generationY 
26.7Numeric arraysY 
26.8Mathematical functions for floating-point typesY 
26.9Numbers  
26.9.1Header<numbers> synopsisY 
26.9.2Mathematical constantsY 
27Time library
27.1General  
27.2Header<chrono> synopsisY 
27.3Cpp17Clock requirementsY 
27.4Time-related traits  
27.4.1treat_as_floating_pointY 
27.4.2duration_valuesY 
27.4.3Specializations ofcommon_typeY 
27.4.4Class templateis_clockY 
27.5Class templateduration  
27.5.1GeneralY 
27.5.2ConstructorsY 
27.5.3ObserverY 
27.5.4ArithmeticY 
27.5.5Special valuesY 
27.5.6Non-member arithmeticY 
27.5.7ComparisonsY 
27.5.8ConversionsY 
27.5.9Suffixes for duration literalsY 
27.5.10AlgorithmsY 
27.5.11I/OY 
27.6Class templatetime_pointY 
27.7Clocks  
27.7.1GeneralY 
27.7.2Classsystem_clockY 
27.7.3Classutc_clockY 
27.7.4Classtai_clockY 
27.7.5Classgps_clockY 
27.7.6Typefile_clockY 
27.7.7Classsteady_clockY 
27.7.8Classhigh_resolution_clockY 
27.7.9Local timeY 
27.7.10time_point conversionsY 
27.8The civil calendar  
27.8.1In general  
27.8.2Classlast_specY 
27.8.3ClassdayY 
27.8.4ClassmonthY 
27.8.5ClassyearY 
27.8.6ClassweekdayY 
27.8.7Classweekday_indexedY 
27.8.8Classweekday_lastY 
27.8.9Classmonth_dayY 
27.8.10Classmonth_day_lastY 
27.8.11Classmonth_weekdayY 
27.8.12Classmonth_weekday_lastY 
27.8.13Classyear_monthY 
27.8.14Classyear_month_dayY 
27.8.15Classyear_month_day_lastY 
27.8.16Classyear_month_weekdayY 
27.8.17Classyear_month_weekday_lastY 
27.9Class templatehh_mm_ssY 
27.1012/24 hours functionsY 
27.11Time zones  
27.11.1In general  
27.11.2Time zone databaseY 
27.11.3Exception classesY 
27.11.4Information classesY 
27.11.5Classtime_zoneY 
27.11.6Class templatezoned_traitsY 
27.11.7Class templatezoned_timeY 
27.11.8Classleap_secondY 
27.11.9Classtime_zone_linkY 
27.12FormattingY 
27.13ParsingY 
27.14Header<ctime> synopsisY 
28Localization library
28.1General  
28.2Header<locale> synopsisY 
28.3Locales  
28.3.1ClasslocaleY 
28.3.2locale globalsY 
28.3.3Convenience interfaces  
28.3.3.1Character classificationY 
28.3.3.2Character conversionsY 
28.4Standardlocale categories  
28.4.1General  
28.4.2Thectype categoryY 
28.4.3The numeric categoryY 
28.4.4The numeric punctuation facetY 
28.4.5The collate categoryY 
28.4.6The time categoryY 
28.4.7The monetary categoryY 
28.4.8The message retrieval categoryY 
28.5C library localesY 
29Input/output library
29.1 GeneralY 
29.2Iostreams requirements  
29.2.1Imbue limitationsY 
29.2.2Positioning type limitationsY 
29.2.3Thread safetyPartial 
29.3Forward declarationsY 
29.4Standard iostream objectsY 
29.5Iostreams base classesY 
29.6Stream buffersY 
29.7Formatting and manipulatorsY 
29.8String-based streamsY 
29.9File-based streamsY 
29.10Synchronized output streams  
29.10.1Header<syncstream> synopsisY 
29.10.2Class templatebasic_syncbufY 
29.10.3Class templatebasic_osyncstreamY 
29.11File systems  
29.11.1General  
29.11.2ConformanceY 
29.11.3RequirementsY 
29.11.4Header<filesystem> synopsisY 
29.11.5Error reportingY 
29.11.6ClasspathY 
29.11.7Classfilesystem_errorY 
29.11.8Enumerations  
29.11.8.1Enumpath::formatY 
29.11.8.2Enum classfile_typeY 
29.11.8.3Enum classcopy_optionsY 
29.11.8.4Enum classpermsY 
29.11.8.5Enum classperm_optionsY 
29.11.8.6Enum classdirectory_optionsY 
29.11.9Classfile_statusY 
29.11.10Classdirectory_entryY 
29.11.11Classdirectory_iteratorY 
29.11.12Classrecursive_directory_iteratorY 
29.11.13Filesystem operation functionsY 
29.12C library files  
29.12.1Header<cstdio> synopsisY 
29.12.2Header<cinttypes> synopsisY 
30Regular expressions library
30.1GeneralY 
30.2RequirementsY 
30.3Header<regex> synopsisY 
30.4Namespacestd::regex_constantsY 
30.5Classregex_errorY 
30.6Class templateregex_traitsPartialtransform_primary is not correctly implemented
30.7Class templatebasic_regexY 
30.8Class templatesub_matchY 
30.9Class templatematch_resultsY 
30.10Regular expression algorithmsY 
30.11Regular expression iteratorsY 
30.12Modified ECMAScript regular expression grammarY 
31Atomics library
31.1GeneralY 
31.2Header<atomic> synopsisY 
31.3Type aliasesY 
31.4Order and consistencyY 
31.5Lock-free propertyY 
31.6Waiting and notifyingPartialWaiting and notifying is not supported for volatile objects.
31.7Class templateatomic_ref  
31.7.1GeneralY 
31.7.2OperationsPartialvolatile-qualified overloads forwait,notify_one, andnotify_all are not provided.
31.7.3Specializations for integral typesY 
31.7.4Specializations for floating-point typesY 
31.7.5Partial specialization for pointersY 
31.8Class templateatomic  
31.8.1GeneralY 
31.8.2Operations on atomic typesPartialWaiting and notifying is not supported for volatile objects.
31.8.3Specializations for integersY 
31.8.4Specializations for floating-point typesY 
31.8.5Partial specialization for pointersY 
31.8.6Member operators common to integers and pointers to objectsY 
31.8.7Partial specializations for smart pointers  
31.8.7.1GeneralY 
31.8.7.2Partial specialization forshared_ptrY 
31.8.7.3Partial specialization forweak_ptrY 
31.9Non-member functionsY 
31.10Flag type and operationsY 
31.11FencesY 
32Threads library
32.1GeneralY 
32.2RequirementsY 
32.3Stop tokens  
32.3.1IntroductionY 
32.3.2Header<stop_token> synopsisY 
32.3.3Classstop_tokenY 
32.3.4Classstop_sourceY 
32.3.5Class templatestop_callbackY 
32.4Threads  
32.4.1General  
32.4.2Header<thread> synopsisY 
32.4.3ClassthreadPartialthread::id comparisons not well-defined
32.4.4ClassjthreadY 
32.4.5Namespacethis_threadY 
32.5Mutual exclusion  
32.5.1General  
32.5.2Header<mutex> synopsis  
32.5.3Header<shared_mutex> synopsis  
32.5.4Mutex requirements  
32.5.4.1In general  
32.5.4.2Mutex typesY 
32.5.4.3Timed mutex typesY 
32.5.4.4Shared mutex typesY 
32.5.4.5Shared timed mutex typesY 
32.5.5LocksY 
32.5.6Generic locking algorithmsY 
32.5.7Call once  
32.5.7.1Structonce_flagY 
32.5.7.2Functioncall_oncePartialException support is broken.SeePR66146.
32.6Condition variablesY 
32.7SemaphoreY 
32.7.1General  
32.7.2Header<semaphore> synopsisY 
32.7.3Class templatecounting_semaphoreY 
32.8Coordination types  
32.8.1General  
32.8.2Latches  
32.8.2.1General  
32.8.2.2Header<latch> synopsisY 
32.8.2.3ClasslatchY 
32.8.3Barriers  
32.8.3.1General  
32.8.3.2Header<barrier> synopsisY 
32.8.3.3Class templatebarrierY 
32.9FuturesY 
Appendix DCompatibility features
D.10C headers  
D.10.1GeneralY 
D.10.2Header<complex.h> synopsisY 
D.10.3Header<iso646.h> synopsisY 
D.10.4Header<stdalign.h> synopsisY 
D.10.5Header<stdbool.h> synopsisY 
D.10.6Header<tgmath.h> synopsisY 
D.10.7Other C headersY 
D.12Relational operatorsY 
D.13char* streamsY 
D.13.1Header<strstream> synopsisY 
D.13.2ClassstrstreambufY 
D.13.3ClassistrstreamY 
D.13.4ClassostrstreamY 
D.13.5ClassstrstreamY 
D.14Deprecated type traitsY 
D.15TupleY 
D.16VariantY 
D.17Deprecatediterator class templateY 
D.18Deprecatedmove_iterator accessY 
D.19Deprecatedshared_ptr atomic accessY 
D.20Deprecatedbasic_string capacityY 
D.21Deprecated standard code conversion facets  
D.21.1GeneralY 
D.21.2Header<codecvt> synopsisY 
D.21.3RequirementsY 
D.22Deprecated convenience conversion interfaces  
D.22.1GeneralY 
D.22.2Class templatewstring_convertY 
D.22.3Class templatewbuffer_convertY 
D.23Deprecated locale category facetsY 
D.24Deprecated filesystem path factory functionsY 
D.25Deprecated atomic operations  
D.25.1GeneralY 
D.25.2Volatile accessY 
D.25.3Non-member functionsY 
D.25.4Operations on atomic typesY 
D.25.5Flag type and operationsY 

Implementation Specific Behavior

For behaviour which is also specified by previous standards, seeC++ 1998/2003 Implementation Specific Behavior,C++ 2011 Implementation Specific Behavior, andC++ 2017 Implementation Specific Behavior. This section only documents behaviour which is new in the 2020 standard.

16.4.2.4 [compliance] The implementation is freestanding if the-ffreestanding compiler flag is used, and hosted otherwise.

16.4.2.4 [compliance] The support for always lock-free integral atomic types and presence ofatomic_signed_lock_free andatomic_unsigned_lock_free type aliases depends on the target.

27.5.11 [time.duration.io] The"μs" ("\u00b5\u0073") is used forstd::microPeriod::type if the macro_GLIBCXX_USE_ALT_MICROSECONDS_SUFFIX is defined to a value other than zero before inclusion of thechrono header,"us" is used otherwise.

29.8.2.2 [stringbuf.cons] Sequence pointers are initialized to null pointers by thebasic_stringbuf(ios_base::openmode) constructor.

31.7.1 [atomics.ref.generic.general],31.7.3 [atomics.ref.int],31.7.4 [atomics.ref.float],31.7.5 [atomics.ref.pointer] The values ofis_always_lock_free members depend on the target and cannot be listed here.

31.7.1 [atomics.ref.generic.general] Ifsizeof(T) is equal to either1,2,4,8, or16, then the value ofrequired_alignment member is equal to the maximum ofalignof(T) andsizeof(T). Otherwiserequired_alignment value isalignof(T).

31.7.3 [atomics.ref.int] The value ofrequired_alignment member is equal to the maximum ofalignof(value_type) andsizeof(value_type).

31.7.4 [atomics.ref.float],31.7.5 [atomics.ref.pointer] The value ofrequired_alignment member is equal toalignof(value_type).

32.7.3 [thread.sema.cnt] The value of default argument for theleast_max_value parameter depends on the target operating system and platform, however the value ofcounting_semaphore<>::max() is greater than or equal tonumeric_limits<int>::max().

C++ 2023

In this implementation the-std=gnu++23 or-std=c++23 flag must be used to enable languageand libraryfeatures. Seedialectoptions. The pre-defined symbol__cplusplus is used to check for thepresence of the required flag.

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

The following table lists new library features that have been accepted intothe C++23 working draft. The "Proposal" column provides a link to theISO C++ committee proposal that describes the feature, while the "Status"column indicates the first version of GCC that contains an implementation ofthis feature (if it has been implemented).A dash (—) in the status column indicates that the changes in the proposaleither do not affect the code in libstdc++, or the changes are not required for conformance.The "SD-6 Feature Test / Notes" column shows the corresponding macro or header fromSD-6:Feature-testing recommendations for C++ (where applicable)or any notes about the implementation.

Table 1.11. C++ 2023 Library Features

Library FeatureProposalStatusSD-6 Feature Test / Notes
Ranges and Views
Range constructor for std::string_view P1989R2 11.1 
join_view should join all views of ranges P2328R1 11.2 
Clarifying range adaptor objects P2281R1 11.1 
Views should not be required to be default constructible P2325R3 11.3__cpp_lib_ranges >= 202106L
Conditionally borrowed ranges P2017R1 11.1 
Requirespan &basic_string_view to be Trivially Copyable P2251R1 Yes 
Repairing input range adaptors and counted_iterator P2259R1 12.1 
Superior String Splitting P2210R2 12.1 
What is aview? P2415R2 12.1__cpp_lib_ranges >= 202110L
Fix istream_view P2432R1 12.1 
starts_with andends_with P1659R3__cpp_lib_ranges_starts_ends_with >= 202106L
zip P2321R2 13.1__cpp_lib_ranges_zip >= 202110L
views::repeat P2474R2 13.1__cpp_lib_ranges_repeat >= 202207L
views::enumerate P2164R9 13.1__cpp_lib_ranges_enumerate >= 202302L
views::join_with P2441R2 13.1__cpp_lib_ranges_join_with >= 202202L
Windowing range adaptors:views::chunkandviews::slide P2442R1 13.1__cpp_lib_ranges_slide >= 202202L
views::chunk_by P2443R1 13.1__cpp_lib_ranges_chunk_by >= 202202L
views::stride P1899R3 13.1__cpp_lib_ranges_stride >= 202207L
views::cartesian_product P2374R4 13.1__cpp_lib_ranges_cartesian_product >= 202207L
Empty Product for certain Views P2540R1 13.1__cpp_lib_ranges_cartesian_product >= 202207L
views::as_rvalue P2446R2 13.1__cpp_lib_ranges_as_rvalue >= 202207L
cbegin should always return a constant iterator P2278R4 13.1__cpp_lib_ranges_as_const >= 202207L
ranges::to P1206R7
14.1 (ranges::to function)
15.1 (new members in containers)
__cpp_lib_ranges_to_container >= 202202L,__cpp_lib_containers_ranges >= 202202L
Ranges iterators as inputs to non-Ranges algorithms P2408R5__cpp_lib_algorithm_iterator_requirements >= 202207L
Pipe support for user-defined range adaptors P2387R3 13.1__cpp_lib_bind_pack >= 202202L,__cpp_lib_ranges >= 202202L
ranges::iota,ranges::shift_left, andranges::shift_right P2440R1 13.1 (ranges::iota)__cpp_lib_ranges_iota >= 202202L,__cpp_lib_shift >= 202202L
ranges::find_last P1223R5 13.1__cpp_lib_ranges_find_last >= 202207L
ranges::contains P2302R4 13.1__cpp_lib_ranges_contains >= 202207L
Making multi-param constructors of views explicit P2711R1 
ranges::fold P2322R6 13.1__cpp_lib_ranges_fold >= 202207L
Relaxing Ranges Just A Smidge P2609R3 14.3__cpp_lib_ranges >= 202302L
Compile-time programming
A proposal for a type trait to detect scoped enumerations P1048R1 11.1__cpp_lib_is_scoped_enum >= 202011L
std::to_underlying for enumerations P1682R3 11.1__cpp_lib_to_underlying >= 202102L
Missing constexpr in std::optional and std::variant P2231R1
11.3 (optional)
12.1 (variant)
__cpp_lib_constexpr_optional >= 202106L
__cpp_lib_variant >= 202106L
Makingstd::unique_ptr constexpr P2273R3 12.1__cpp_lib_constexpr_memory >= 202202L
Makingstd::type_info::operator== constexpr P1328R1 12.1__cpp_lib_constexpr_typeinfo >= 202106L
constexpr for<cmath> and<cstdlib> P0533R9__cpp_lib_constexpr_cmath >= 202202L
Deprecate std::aligned_storage and std::aligned_union P1413R3 13.1 
A type trait to detect reference binding to temporary P2255R2
13.1 (missing changes tostd::tuple)
14.1 (complete)
__cpp_lib_reference_from_temporary >= 202202L
Move-only types for equality_comparable_with, totally_ordered_with,and three_way_comparable_with P2404R3__cpp_lib_concepts >= 202207L
A trait for implicit lifetime types P2674R1__cpp_lib_is_implicit_lifetime >= 202302L
common_reference_t ofreference_wrapperShould Be a Reference Type P2655R3__cpp_lib_common_reference >= 202302L
Deprecatenumeric_limits::has_denorm P2614R2 
Containers
Iterator pair constructors for stack and queue P1425R4 12.1__cpp_lib_adaptor_iterator_pair_constructor >= 202106L
Stop overconstraining allocators in container deduction guides P1518R2 12.1 
Heterogeneous erasure overloads for associative containers P2077R3__cpp_lib_associative_heterogeneous_erasure >= 202110L
<flat_map> P0429R9 15.1__cpp_lib_flat_map >= 202207L
<flat_set> P1222R4 15.1__cpp_lib_flat_set >= 202207L
mdspan P0009R18__cpp_lib_mdspan >= 202207L
index_type &size_typeinmdspan P2599R2__cpp_lib_mdspan >= 202207L
mdspan: renamepointer andcontiguous P2604R0__cpp_lib_mdspan >= 202207L
Add the missingempty tomdspan P2613R1__cpp_lib_mdspan >= 202207L
layout_stride static extents default constructor fix P2763R1 
Strings and text
string contains function P1679R3 11.1__cpp_lib_string_contains >= 202011L
Prohibit std::basic_string and std::basic_string_view construction from nullptr P2166R1 12.1 
basic_string::resize_and_overwrite P1072R10 12.1__cpp_lib_resize_and_overwrite >= 202110L
A strstream replacement using span<charT> as buffer P0448R4 12.1__cpp_lib_spanstream >= 202106L
std::string::substr() && P2438R2 
std::format improvements P2216R3 13.1__cpp_lib_format >= 202106L
Add support forstd::generator-like types tostd::format P2418R2 13.1__cpp_lib_format >= 202110L
Exposestd::basic-format-string<charT, Args...> P2508R1 13.1 (feature test macro not updated until 15.1)__cpp_lib_format >= 202207L
Clarify handling of encodings in localized formatting of chrono types P2419R2 15.1__cpp_lib_format >= 202207L
Formatting pointers P2510R3 13.2 (feature test macro not updated until 15.1)__cpp_lib_format >= 202207L
Formatting Ranges P2286R8
15.1 (changes to adaptors missing)
15.2 (complete)
__cpp_lib_format_ranges >= 202207L
Improve default container formatting P2585R1 15.1 (feature test macro not defined until 15.2)__cpp_lib_format_ranges >= 202207L
Formatted output P2093R14 14.1__cpp_lib_print >= 202207L
Should the output of std::print to a terminal be synchronized withthe underlying stream? P2539R3 14.1 
Formattingthread::id andstacktrace P2693R1 14.1__cpp_lib_formatters >= 202302L
Add Constexpr Modifiers to Functionsto_chars andfrom_chars for Integral Types in<charconv> Header P2291R3 13.1__cpp_lib_constexpr_charconv >= 202207L
Miscellaneous
Inheriting fromstd::variant P2162R2 11.3__cpp_lib_variant >= 202102L
Printingvolatile Pointers P1147R1 11.3 
A Proposal to add stacktrace library P0881R7 12.1__cpp_lib_stacktrace >= 202011L
Add a pmr alias for std::stacktrace P2301R1 12.1 
std::expected P0323R12 12.1__cpp_lib_expected >= 202202L
Monadic operations for std::expected P2505R5 13.1__cpp_lib_expected >= 202211L
Monadic operations for std::optional P0798R8 12.1__cpp_lib_optional >= 202110L
Compatibility betweentuple,pairandtuple-like objects P2165R4 14.1__cpp_lib_tuple_like >= 202207L
Default Arguments forpair's Forwarding Constructor P1951R1 14.1 
move_only_function P0288R9 12.1__cpp_lib_move_only_function >= 202110L
invoke_r P2136R3 12.1__cpp_lib_invoke_r >= 202106L
Byteswapping for fun&&nuf P1272R4 12.1__cpp_lib_byteswap >= 202110L
Function to mark unreachable code P0627R6 12.1__cpp_lib_unreachable >= 202202L
Add a conditional noexcept specification to std::exchange P2401R0 12.1 
A more constexpr bitset P2417R2 13.1__cpp_lib_constexpr_bitset >= 202207L
Extended floating-point types and standard names P1467R9 13.1 
Support C atomics in C++ P0943R6 12.1__cpp_lib_stdatomic_h >= 202011L
Clarifying the status of the "C headers" P2340R1 Yes 
Relax Requirements for time_point::clock P2212R2 Yes 
Removing Garbage Collection Support P2186R2 12.1 
Easy [utilities], [ranges], and [iterators] P1642R11 13.1 
Providing size feedback in the Allocator interface P0401R6__cpp_lib_allocate_at_least >= 202306L
Disallow User Specialization ofallocator_traits P2652R2 
Explicit lifetime management P2590R2__cpp_lib_start_lifetime_as >= 202207L
Fixingstd::start_lifetime_as andstd::start_lifetime_as_array P2679R2 
out_ptr - a scalable output pointer abstraction P1132R8 14.1__cpp_lib_out_ptr >= 202106L
barrier's phase completion guarantees P2588R3__cpp_lib_barrier >= 202302L
Standard Library Modulesstd andstd.compat P2465R3 15.1__cpp_lib_modules >= 202207L

C++ TR1

This table is based on the table of contents of ISO/IEC DTR 19768,Doc No: N1836=05-0096, Date: 2005-06-24,"Draft Technical Report on C++ Library Extensions".

In this implementation the header names are prefixed bytr1/, for instance<tr1/functional>,<tr1/memory>, and so on.

This page describes the TR1 support inmainline GCC, not in any particular release.

Table 1.12. C++ TR1 Implementation Status

SectionDescriptionStatusComments
2General Utilities
2.1Reference wrappers  
2.1.1Additions to header<functional> synopsisY 
2.1.2Class templatereference_wrapper  
2.1.2.1reference_wrapper construct/copy/destroyY 
2.1.2.2reference_wrapper assignmentY 
2.1.2.3reference_wrapper accessY 
2.1.2.4reference_wrapper invocationY 
2.1.2.5reference_wrapper helper functionsY 
2.2Smart pointers  
2.2.1Additions to header<memory> synopsisY 
2.2.2Classbad_weak_ptrY 
2.2.3Class templateshared_ptr 

Uses code fromboost::shared_ptr.

2.2.3.1shared_ptr constructorsY 
2.2.3.2shared_ptr destructorY 
2.2.3.3shared_ptr assignmentY 
2.2.3.4shared_ptr modifiersY 
2.2.3.5shared_ptr observersY 
2.2.3.6shared_ptr comparisonY 
2.2.3.7shared_ptr I/OY 
2.2.3.8shared_ptr specialized algorithmsY 
2.2.3.9shared_ptr castsY 
2.2.3.10get_deleterY 
2.2.4Class templateweak_ptr  
2.2.4.1weak_ptr constructorsY 
2.2.4.2weak_ptr destructorY 
2.2.4.3weak_ptr assignmentY 
2.2.4.4weak_ptr modifiersY 
2.2.4.5weak_ptr observersY 
2.2.4.6weak_ptr comparisonY 
2.2.4.7weak_ptr specialized algorithmsY 
2.2.5Class templateenable_shared_from_thisY 
3Function Objects
3.1DefinitionsY 
3.2Additions to<functional> synopsisY 
3.3RequirementsY 
3.4Function return typesY 
3.5Function templatemem_fnY 
3.6Function object binders  
3.6.1Class templateis_bind_expressionY 
3.6.2Class templateis_placeholderY 
3.6.3Function templatebindY 
3.6.4PlaceholdersY 
3.7Polymorphic function wrappers  
3.7.1Classbad_function_callY 
3.7.1.1bad_function_call constructorY 
3.7.2Class templatefunction  
3.7.2.1function construct/copy/destroyY 
3.7.2.2function modifiersY 
3.7.2.3function capacityY 
3.7.2.4function invocationY 
3.7.2.5function target accessY 
3.7.2.6undefined operatorsY 
3.7.2.7null pointer comparison operatorsY 
3.7.2.8specialized algorithmsY 
4Metaprogramming and type traits
4.1RequirementsY 
4.2Header<type_traits> synopsisY 
4.3Helper classesY 
4.4General RequirementsY 
4.5Unary Type Traits  
4.5.1Primary Type CategoriesY 
4.5.2Composite type traitsY 
4.5.3Type propertiesY 
4.6Relationships between typesY 
4.7Transformations between types  
4.7.1Const-volatile modificationsY 
4.7.2Reference modificationsY 
4.7.3Array modificationsY 
4.7.4Pointer modificationsY 
4.8Other transformationsY 
4.9Implementation requirementsY 
5Numerical Facilities
5.1Random number generation  
5.1.1RequirementsY 
5.1.2Header<random> synopsisY 
5.1.3Class templatevariate_generatorY 
5.1.4Random number engine class templatesY 
5.1.4.1Class templatelinear_congruentialY 
5.1.4.2Class templatemersenne_twisterY 
5.1.4.3Class templatesubtract_with_carryY 
5.1.4.4Class templatesubtract_with_carry_01Y 
5.1.4.5Class templatediscard_blockY 
5.1.4.6Class templatexor_combineYoperator()() per N2079
5.1.5Engines with predefined parametersY 
5.1.6Classrandom_deviceY 
5.1.7Random distribution class templatesY 
5.1.7.1Class templateuniform_intY 
5.1.7.2Classbernoulli_distributionY 
5.1.7.3Class templategeometric_distributionY 
5.1.7.4Class templatepoisson_distributionY 
5.1.7.5Class templatebinomial_distributionY 
5.1.7.6Class templateuniform_realY 
5.1.7.7Class templateexponential_distributionY 
5.1.7.8Class templatenormal_distributionY 
5.1.7.9Class templategamma_distributionY 
5.2Mathematical special functionsY 
5.2.1Additions to header<cmath> synopsisY 
5.2.1.1associated Laguerre polynomialsY 
5.2.1.2associated Legendre functionsY 
5.2.1.3beta functionY 
5.2.1.4(complete) elliptic integral of the first kindY 
5.2.1.5(complete) elliptic integral of the second kindY 
5.2.1.6(complete) elliptic integral of the third kindY 
5.2.1.7confluent hypergeometric functionsY 
5.2.1.8regular modified cylindrical Bessel functionsY 
5.2.1.9cylindrical Bessel functions (of the first kind)Y 
5.2.1.10irregular modified cylindrical Bessel functionsY 
5.2.1.11cylindrical Neumann functionsY 
5.2.1.12(incomplete) elliptic integral of the first kindY 
5.2.1.13(incomplete) elliptic integral of the second kindY 
5.2.1.14(incomplete) elliptic integral of the third kindY 
5.2.1.15exponential integralY 
5.2.1.16Hermite polynomialsY 
5.2.1.17hypergeometric functionsY 
5.2.1.18Laguerre polynomialsY 
5.2.1.19Legendre polynomialsY 
5.2.1.20Riemann zeta functionY 
5.2.1.21spherical Bessel functions (of the first kind)Y 
5.2.1.22spherical associated Legendre functionsY 
5.2.1.23spherical Neumann functionsY 
5.2.2Additions to header<math.h> synopsisY 
6Containers
6.1Tuple typesY 
6.1.1Header<tuple> synopsisY 
6.1.2Additions to header<utility> synopsisY 
6.1.3Class templatetupleY 
6.1.3.1ConstructionY 
6.1.3.2Tuple creation functionsY 
6.1.3.3Tuple helper classesY 
6.1.3.4Element accessY 
6.1.3.5Relational operatorsY 
6.1.4PairsY 
6.2Fixed size arrayY 
6.2.1Header<array> synopsisY 
6.2.2Class templatearrayY 
6.2.2.1array constructors, copy, and assignmentY 
6.2.2.2array specialized algorithmsY 
6.2.2.3array sizeY 
6.2.2.4Zero sizedarraysY 
6.2.2.5Tuple interface to class templatearrayY 
6.3Unordered associative containersY 
6.3.1Unordered associative container requirementsY 
6.3.1.1Exception safety guaranteesY 
6.3.2Additions to header<functional> synopsisY 
6.3.3Class templatehashY 
6.3.4Unordered associative container classesY 
6.3.4.1Header<unordered_set> synopsisY 
6.3.4.2Header<unordered_map> synopsisY 
6.3.4.3Class templateunordered_setY 
6.3.4.3.1unordered_set constructorsY 
6.3.4.3.2unordered_set swapY 
6.3.4.4Class templateunordered_mapY 
6.3.4.4.1unordered_map constructorsY 
6.3.4.4.2unordered_map element accessY 
6.3.4.4.3unordered_map swapY 
6.3.4.5Class templateunordered_multisetY 
6.3.4.5.1unordered_multiset constructorsY 
6.3.4.5.2unordered_multiset swapY 
6.3.4.6Class templateunordered_multimapY 
6.3.4.6.1unordered_multimap constructorsY 
6.3.4.6.2unordered_multimap swapY 
7Regular Expressions
7.1DefinitionsN 
7.2RequirementsN 
7.3Regular expressions summaryN 
7.4Header<regex> synopsisN 
7.5Namespacetr1::regex_constantsN 
7.5.1Bitmask Typesyntax_option_typeN 
7.5.2Bitmask Typeregex_constants::match_flag_typeN 
7.5.3Implementation definederror_typeN 
7.6Classregex_errorN 
7.7Class templateregex_traitsN 
7.8Class templatebasic_regexN 
7.8.1basic_regex constantsN 
7.8.2basic_regex constructorsN 
7.8.3basic_regex assignN 
7.8.4basic_regex constant operationsN 
7.8.5basic_regex localeN 
7.8.6basic_regex swapN 
7.8.7basic_regex non-member functionsN 
7.8.7.1basic_regex non-member swapN 
7.9Class templatesub_matchN 
7.9.1sub_match membersN 
7.9.2sub_match non-member operatorsN 
7.10Class templatematch_resultsN 
7.10.1match_results constructorsN 
7.10.2match_results sizeN 
7.10.3match_results element accessN 
7.10.4match_results formattingN 
7.10.5match_results allocatorN 
7.10.6match_results swapN 
7.11Regular expression algorithmsN 
7.11.1exceptionsN 
7.11.2regex_matchN 
7.11.3regex_searchN 
7.11.4regex_replaceN 
7.12Regular expression IteratorsN 
7.12.1Class templateregex_iteratorN 
7.12.1.1regex_iterator constructorsN 
7.12.1.2regex_iterator comparisonsN 
7.12.1.3regex_iterator dereferenceN 
7.12.1.4regex_iterator incrementN 
7.12.2Class templateregex_token_iteratorN 
7.12.2.1regex_token_iterator constructorsN 
7.12.2.2regex_token_iterator comparisonsN 
7.12.2.3regex_token_iterator dereferenceN 
7.12.2.4regex_token_iterator incrementN 
7.13Modified ECMAScript regular expression grammarN 
8C Compatibility
8.1Additions to header<complex>Y 
8.1.1SynopsisY 
8.1.2FunctionacosY 
8.1.3FunctionasinY 
8.1.4FunctionatanY 
8.1.5FunctionacoshY 
8.1.6FunctionasinhY 
8.1.7FunctionatanhY 
8.1.8FunctionfabsY 
8.1.9Additional OverloadsY 
8.2Header<ccomplex>NDR 551
8.3Header<complex.h>NDR 551
8.4Additions to header<cctype>Y 
8.4.1SynopsisY 
8.4.2FunctionisblankY 
8.5Additions to header<ctype.h>Y 
8.6Header<cfenv>Y 
8.6.1SynopsisY 
8.6.2DefinitionsY 
8.7Header<fenv.h>Y 
8.8Additions to header<cfloat>Y 
8.9Additions to header<float.h>Y 
8.10Additions to header<ios>N 
8.10.1SynopsisN 
8.10.2FunctionhexfloatN 
8.11Header<cinttypes>Y 
8.11.1SynopsisYDR 557
8.11.2DefinitionsY 
8.12Header<inttypes.h>Y 
8.13Additions to header<climits>Y 
8.14Additions to header<limits.h>Y 
8.15Additions to header<locale>N 
8.16Additions to header<cmath>Y 
8.16.1SynopsisY 
8.16.2DefinitionsY 
8.16.3Function template definitionsY 
8.16.4Additional overloadsYDR 568; DR 550
8.17Additions to header<math.h>Y 
8.18Additions to header<cstdarg>Y 
8.19Additions to header<stdarg.h>Y 
8.20The header<cstdbool>Y 
8.21The header<stdbool.h>Y 
8.22The header<cstdint>Y 
8.22.1SynopsisY 
8.22.2DefinitionsY 
8.23The header<stdint.h>Y 
8.24Additions to header<cstdio>Y 
8.24.1SynopsisY 
8.24.2DefinitionsY 
8.24.3Additional format specifiersYC library dependency
8.24.4Additions to header<stdio.h>Y 
8.25Additions to header<cstdlib>Y 
8.25.1SynopsisY 
8.25.2DefinitionsY 
8.25.3FunctionabsY 
8.25.4FunctiondivY 
8.26Additions to header<stdlib.h>Y 
8.27Header<ctgmath>YDR 551
8.28Header<tgmath.h>YDR 551
8.29Additions to header<ctime>YC library dependency
8.30Additions to header<cwchar>Y 
8.30.1SynopsisY 
8.30.2DefinitionsY 
8.30.3Additional wide format specifiersYC library dependency
8.31Additions to header<wchar.h>Y 
8.32Additions to header<cwctype>Y 
8.32.1SynopsisY 
8.32.2FunctioniswblankY 
8.33Additions to header<wctype.h>Y 

Implementation Specific Behavior

For behaviour which is specified by the 1998 and 2003 standards, seeC++ 1998/2003 Implementation Specific Behavior. This section documents behaviour which is required by TR1.

3.6.4 [tr.func.bind.place]/1 There are 29 placeholders defined and the placeholder types areAssignable.

C++ TR 24733

This table is based on the table of contents ofISO/IEC TR 24733:2011,"Extensions for the programming language C++ to supportdecimal floating-point arithmetic".

This page describes the TR 24733 support inmainline GCC, not in any particular release.

Table 1.13. C++ TR 24733 Implementation Status

SectionDescriptionStatusComments
0Introduction
1Normative references
2Conventions
3Decimal floating-point types
3.1Characteristics of decimal floating-point types  
3.2Decimal Types  
3.2.1Classdecimal synopsisPartialMissing declarations for formatted input/output; non-conforming extension for functions converting to integral type
3.2.2Classdecimal32PartialMissing 3.2.2.5 conversion to integral type; conforming extension for conversion from scalar decimal floating-point
3.2.3Classdecimal64PartialMissing 3.2.3.5 conversion to integral type; conforming extension for conversion from scalar decimal floating-point
3.2.4Classdecimal128PartialMissing 3.2.4.5 conversion to integral type; conforming extension for conversion from scalar decimal floating-point
3.2.5Initialization from coefficient and exponentY 
3.2.6Conversion to generic floating-point typeY 
3.2.7Unary arithmetic operatorsY 
3.2.8Binary arithmetic operatorsY 
3.2.9Comparison operatorsY 
3.2.10Formatted inputN 
3.2.11Formatted outputN 
3.3Additions to headerlimitsN 
3.4Headerscfloat andfloat.h  
3.4.2Additions to headercfloat synopsisY 
3.4.3Additions to headerfloat.h synopsisN 
3.4.4Maximum finite valueY 
3.4.5EpsilonY 
3.4.6Minimum positive normal valueY 
3.4.7Minimum positive subnormal valueY 
3.4.8Evaluation formatY 
3.5Additions tocfenv andfenv.hOutside the scope of GCC 
3.6Additions tocmath andmath.hOutside the scope of GCC 
3.7Additions tocstdio andstdio.hOutside the scope of GCC 
3.8Additions tocstdlib andstdlib.hOutside the scope of GCC 
3.9Additions tocwchar andwchar.hOutside the scope of GCC 
3.10FacetsN 
3.11Type traitsN 
3.12Hash functionsN 
4Notes on C compatibility

C++ IS 29124

This table is based on the table of contents of ISO/IEC FDIS 29124,Doc No: N3060, Date: 2010-03-06,"Extensions to the C++ Library to support mathematical special functions".

Complete support for IS 29124 is in GCC 6.1 and later releases, when usingat least C++11 (for older releases or C++98/C++03 use TR1 instead).For C++11 and C++14 the additions to the library are not declared by theirrespective headers unless__STDCPP_WANT_MATH_SPEC_FUNCS__is defined as a macro that expands to a non-zero integer constant.For C++17 the special functions are always declared (since GCC 7.1).

When the special functions are declared the macro__STDCPP_MATH_SPEC_FUNCS__ is defined to201003L.

In addition to the special functions defined in IS 29124, fornon-strict modes (i.e.-std=gnu++NN modes) thehypergeometric functions and confluent hypergeometric functionsfrom TR1 are also provided, defined in namespace__gnu_cxx.

Table 1.14. C++ Special Functions Implementation Status

SectionDescriptionStatusComments
7Macro namesPartialNo diagnostic for inconsistent definitions of__STDCPP_WANT_MATH_SPEC_FUNCS__
8Mathematical special functionsY 
8.1Additions to header<cmath> synopsisY 
8.1.1associated Laguerre polynomialsY 
8.1.2associated Legendre functionsY 
8.1.3beta functionY 
8.1.4(complete) elliptic integral of the first kindY 
8.1.5(complete) elliptic integral of the second kindY 
8.1.6(complete) elliptic integral of the third kindY 
8.1.7regular modified cylindrical Bessel functionsY 
8.1.8cylindrical Bessel functions (of the first kind)Y 
8.1.9irregular modified cylindrical Bessel functionsY 
8.1.10cylindrical Neumann functionsY 
8.1.11(incomplete) elliptic integral of the first kindY 
8.1.12(incomplete) elliptic integral of the second kindY 
8.1.13(incomplete) elliptic integral of the third kindY 
8.1.14exponential integralY 
8.1.15Hermite polynomialsY 
8.1.16Laguerre polynomialsY 
8.1.17Legendre polynomialsY 
8.1.18Riemann zeta functionY 
8.1.19spherical Bessel functions (of the first kind)Y 
8.1.20spherical associated Legendre functionsY 
8.1.21spherical Neumann functionsY 
8.2Additions to header<math.h>Y 
8.3The header<ctgmath>PartialConflicts with C++ 2011 requirements.
8.4The header<tgmath.h>NConflicts with C++ 2011 requirements.

Implementation Specific Behavior

For behaviour which is specified by the 2011 standard, seeC++ 2011 Implementation Specific Behavior. This section documents behaviour which is required by IS 29124.

7.2 [macro.user]/3 /4 The functions declared in Clause 8 are only declared when__STDCPP_WANT_MATH_SPEC_FUNCS__ == 1 (or in C++17 mode, for GCC 7.1 and later).

8.1.1 [sf.cmath.Lnm]/1 The effect of calling these functions withn >= 128 orm >= 128 should be described here.

8.1.2 [sf.cmath.Plm]/3 The effect of calling these functions withl >= 128 should be described here.

8.1.3 [sf.cmath.I]/3 The effect of calling these functions withnu >= 128 should be described here.

8.1.8 [sf.cmath.J]/3 The effect of calling these functions withnu >= 128 should be described here.

8.1.9 [sf.cmath.K]/3 The effect of calling these functions withnu >= 128 should be described here.

8.1.10 [sf.cmath.N]/3 The effect of calling these functions withnu >= 128 should be described here.

8.1.15 [sf.cmath.Hn]/3 The effect of calling these functions withn >= 128 should be described here.

8.1.16 [sf.cmath.Ln]/3 The effect of calling these functions withn >= 128 should be described here.

8.1.17 [sf.cmath.Pl]/3 The effect of calling these functions withl >= 128 should be described here.

8.1.19 [sf.cmath.j]/3 The effect of calling these functions withn >= 128 should be described here.

8.1.20 [sf.cmath.Ylm]/3 The effect of calling these functions withl >= 128 should be described here.

8.1.21 [sf.cmath.n]/3 The effect of calling these functions withn >= 128 should be described here.


Prev Up Next
Part I.  Introduction  Home License

[8]ページ先頭

©2009-2026 Movatter.jp