Chapter 1. Status

Table of Contents

Implementation Status
C++ 1998/2003
Implementation Status
Implementation Specific Behavior
C++ 2011
Implementation Specific Behavior
C++ 2014
C++ 201z
C++ TR1
Implementation Specific Behavior
C++ TR 24733
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 page describes the C++ support in the GCC 6 series.

Table 1.1. C++ 1998/2003 Implementation Status

SectionDescriptionStatusComments
18 Language support
18.1TypesY 
18.2Implementation propertiesY 
18.2.1Numeric Limits  
18.2.1.1Class template numeric_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 
19 Diagnostics
19.1Exception classesY 
19.2AssertionsY 
19.3Error numbersY 
20 General 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 template auto_ptrY 
20.4.6C libraryY 
21 Strings
21.1Character traits  
21.1.1Character traits requirementsY 
21.1.2traits typedefY 
21.1.3char_traits specializations  
21.1.3.1struct char_traits<char>Y 
21.1.3.2struct char_traits<wchar_t>Y 
21.2String classesY 
21.3Class template basic_stringY 
21.4Null-terminated sequence utilitiesYC library dependency
22 Localization
22.1Locales  
22.1.1Class localeY 
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 
23 Containers
23.1Container requirementsY 
23.2Sequence containers  
23.2.1Class template dequeY 
23.2.2Class template listY 
23.2.3Adaptors  
23.2.3.1Class template queueY 
23.2.3.2Class template priority_queueY 
23.2.3.3Class template stackY 
23.2.4Class template vectorY 
23.2.5Class vector<bool>Y 
23.3Associative containers  
23.3.1Class template mapY 
23.3.2Class template multimapY 
23.3.3Class template setY 
23.3.4Class template multisetY 
24 Iterators
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 template istream_iteratorY 
24.5.2Class template ostream_iteratorY 
24.5.3Class template istreambuf_iteratorY 
24.5.4Class template ostreambuf_iteratorY 
25 Algorithms
25.1Non-modifying sequence operationsY 
25.2Mutating sequence operationsY 
25.3Sorting and related operationsY 
25.4C library algorithmsY 
26 Numerics
26.1Numeric type requirementsY 
26.2Complex numbersY 
26.3Numeric arrays  
26.3.1Header <valarray> synopsisY 
26.3.2Class template valarrayY 
26.3.3valarray non-member operationsY 
26.3.4Class sliceY 
26.3.5Class template slice_arrayY 
26.3.6Class gsliceY 
26.3.7Class template gslice_arrayY 
26.3.8Class template mask_arrayY 
26.3.9Class template indirect_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 
27 Input/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 D Compatibility 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 implementation and 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]/11 #3 If isatty(3) is true, then interactive stream support is implied.

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

[18.1]/4 The type of NULL is described under Support.

[18.3]/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]/5 (bad_alloc), [18.5.2]/5 (bad_cast), [18.5.3]/5 (bad_typeid), [18.6.1]/8 (exception), [18.6.2.1]/5 (bad_exception): The what() member function of class std::exception, and these other classes publicly derived from it, simply returns the name of the class. But they are the mangled names; you will need to call c++filt and pass the names as command-line parameters to demangle them, or call a runtime demangler function. (The classes in <stdexcept> have constructors which require an argument to use later for what() calls, so the problem of what()'s value does not arise in most user-defined exceptions.)

[18.5.1]/7 The return value of std::type_info::name() is the mangled type name (see the previous entry for more).

[20.1.5]/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]/3,4, [21.1.3.2]/2, [23.*]'s foo::iterator, [27.*]'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]/5 I don't really know about the mbstate_t stuff... see the codecvt notes for what does exist.

[22.*] Anything and everything we have on locale implementation will be described under Localization.

[23.*] All of the containers in this clause define size_type as std::size_t and difference_type as std::ptrdiff_t.

[26.2.8]/9 I have no idea what complex<T>'s pow(0,0) returns.

[27.4.2.4]/2 Calling std::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], [27.6.2.3] 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]/16, [27.8.1.4]/10 The effects of pubsetbuf/setbuf are described in the Input and Output chapter.

[27.8.1.4]/16 Calling fstream::sync when a get area exists will... whatever fflush() does, I think.

C++ 2011

This table is based on the table of contents of ISO/IEC JTC1 SC22 WG21 Doc No: N3290 Date: 2011-04-11 Final 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 language and library features. See dialect options. The pre-defined symbol __cplusplus is used to check for the presence of the required flag.

This page describes the C++11 support in the GCC 6 series.

Table 1.2. C++ 2011 Implementation Status

SectionDescriptionStatusComments
18 Language support
18.1GeneralY 
18.2TypesY 
18.3Implementation properties  
18.3.2Numeric Limits  
18.3.2.3Class template numeric_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 
19 Diagnostics
19.1GeneralY 
19.2Exception classesY 
19.3AssertionsY 
19.4Error numbersY 
19.5System error support  
19.5.1Class error_categoryY 
19.5.2Class error_codeY 
19.5.3Class error_conditionY 
19.5.4Comparison operatorsY 
19.5.5Class system_errorY 
20 General utilities
20.1General  
20.2Utility components  
20.2.1OperatorsY 
20.2.2SwapY 
20.2.3forward and move helpersY 
20.2.4Function template declvalY 
20.3Pairs  
20.3.1In general  
20.3.2Class template pairY 
20.3.3Specialized algorithmsY 
20.3.4Tuple-like access to pairY 
20.3.5Piecewise constructionY 
20.4Tuples  
20.4.1In general  
20.4.2Class template tuple  
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 template bitsetY 
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 template unique_ptrY 
20.7.2Shared-ownership pointersY 
20.7.2.1Class bad_weak_ptrY 
20.7.2.2Class template shared_ptrY Uses code from boost::shared_ptr.
20.7.2.3Class template weak_ptrY 
20.7.2.4Class template emable_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 template reference_wrapperY 
20.8.4Arithmetic operationY 
20.8.5ComparisonsY 
20.8.6Logical operationsY 
20.8.7Bitwise operationsY 
20.8.8NegatorsY 
20.8.9Function template bindY 
20.8.10Function template mem_fnY 
20.8.11Polymorphic function wrappers  
20.8.11.1Class bad_function_callY 
20.8.11.2Class template functionPartialMissing allocator support
20.8.12Class template hashY 
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 template ratioY 
20.10.4Arithmetic on ratiosY 
20.10.5Comparison of ratiosY 
20.10.6SI types for ratioY 
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 of common_typeY 
20.11.5Class template durationY 
20.11.6Class template time_pointY 
20.11.7Clocks  
20.11.7.1Class system_clockY 
20.11.7.2Class steady_clockY 
20.11.7.3Class high_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.13Class type_indexY 
21 Strings
21.1GeneralY 
21.2Character traits  
21.2.1Character traits requirementsY 
21.2.2traits typedefsY 
21.2.3char_traits specializations  
21.2.3.1struct char_traits<char>Y 
21.2.3.2struct char_traits<char16_t>Y 
21.2.3.3struct char_traits<char32_t>Y 
21.2.3.4struct char_traits<wchar_t>Y 
21.3String classesY 
21.4Class template basic_stringY 
21.5Numeric ConversionsY 
21.6Hash supportY 
21.7Null-terminated sequence utilitiesPartialC library dependency. Missing <cuchar>
22 Localization
22.1GeneralY 
22.2Header <locale> synopsisY 
22.3Locales  
22.3.1Class localeY 
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.4Standard locale categories  
22.4.1The ctype 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 template time_getY 
22.4.5.2Class template time_get_bynameY 
22.4.5.3Class template time_putY 
22.4.5.3Class template time_put_bynameY 
22.4.6The monetary category  
22.4.6.1Class template money_getY 
22.4.6.2Class template money_putY 
22.4.6.3Class template money_punctY 
22.4.6.4Class template money_punct_bynameY 
22.4.7The message retrieval categoryY 
22.4.8Program-defined facetsY 
22.5Standard code conversion facetsY 
22.6C Library LocalesY 
23 Containers
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 template arrayY 
23.3.3Class template dequeY 
23.3.4Class template forward_listY 
23.3.5Class template listY 
23.3.6Class template vectorY 
23.3.7Class vector<bool>Y 
23.4Associative containers  
23.4.4Class template mapY 
23.4.5Class template multimapY 
23.4.6Class template setY 
23.4.7Class template multisetY 
23.5Unordered associative containers  
23.5.4Class template unordered_mapY 
23.5.5Class template unordered_multimapY 
23.5.6Class template unordered_setY 
23.5.7Class template unordered_multisetY 
23.6Container adaptors  
23.6.1Class template queueY 
23.6.2Class template priority_queueY 
23.6.3Class template stackY 
24 Iterators
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 template istream_iteratorY 
24.6.2Class template ostream_iteratorY 
24.6.3Class template istreambuf_iteratorY 
24.6.4Class template ostreambuf_iteratorY 
24.6.5range accessY 
25 Algorithms
25.1General  
25.2Non-modifying sequence operationsY 
25.3Mutating sequence operationsY 
25.4Sorting and related operationsY 
25.5C library algorithmsY 
26 Numerics
26.1GeneralY 
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 template linear_congruential_engineY 
26.5.3.2Class template mersenne_twister_engineY 
26.5.3.3Class template subtract_with_carry_engineY 
26.5.4Random number engine adaptor class templates  
26.5.4.2Class template discard_block_engineY 
26.5.4.3Class template independent_bits_engineY 
26.5.4.4Class template shuffle_order_engineY 
26.5.5Engines and engine adaptors with predefined parametersY 
26.5.6Class random_deviceY 
26.5.7Utilities  
26.5.7.1Class seed_seqY 
26.5.7.2Function template generate_canonicalY 
26.5.8Random number distribution class templates  
26.5.8.2Uniform distributions  
26.5.8.2.1Class template uniform_int_distributionY 
26.5.8.2.2Class template uniform_real_distributionY 
26.5.8.3Bernoulli distributions  
26.5.8.3.1Class bernoulli_distributionY 
26.5.8.3.2Class template binomial_distributionY 
26.5.8.3.3Class template geometric_distributionY 
26.5.8.3.4Class template negative_binomial_distributionY 
26.5.8.4Poisson distributions  
26.5.8.4.1Class template poisson_distributionY 
26.5.8.4.2Class template exponential_distributionY 
26.5.8.4.3Class template gamma_distributionY 
26.5.8.4.4Class template weibull_distributionY 
26.5.8.4.5Class template extreme_value_distributionY 
26.5.8.5Normal distributions  
26.5.8.5.1Class template normal_distributionY 
26.5.8.5.2Class template lognormal_distributionY 
26.5.8.5.3Class template chi_squared_distributionY 
26.5.8.5.4Class template cauchy_distributionY 
26.5.8.5.5Class template fisher_f_distributionY 
26.5.8.5.6Class template student_t_distributionY 
26.5.8.6Sampling distributions  
26.5.8.6.1Class template discrete_distributionY 
26.5.8.6.2Class template piecewise_constant_distributionY 
26.5.8.6.3Class template piecewise_linear_distributionY 
26.6Numeric arrays  
26.6.1Header <valarray> synopsisY 
26.6.2Class template valarrayY 
26.6.3valarray non-member operationsY 
26.6.4Class sliceY 
26.6.5Class template slice_arrayY 
26.6.6The gslice classY 
26.6.7Class template gslice_arrayY 
26.6.8Class template mask_arrayY 
26.6.9Class template indirect_arrayY 
26.6.10valarray range accessY 
26.7Generalized numeric operations  
26.7.1Header <numeric> synopsisY 
26.7.2accumulateY 
26.7.3inner_productY 
26.7.4partial_sumY 
26.7.5adjacent_differenceY 
26.7.6iotaY 
26.8C LibraryY 
27 Input/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 
28 Regular expressions
28.1GeneralY 
28.2DefinitionsY 
28.3RequirementsY 
28.4Header <regex> synopsisY 
28.5Namespace std::regex_constantsY 
28.6Class regex_errorY 
28.7Class template regex_traitsPartialtransform_primary is not correctly implemented 
28.8Class template basic_regexY 
28.9Class template sub_matchY 
28.10Class template match_resultsY 
28.11Regular expression algorithmsY 
28.12Regular expression IteratorsY 
28.13Modified ECMAScript regular expression grammarY 
29 Atomic operations
29.1GeneralY 
29.2Header <atomic> synopsisY 
29.3Order and consistencyPartial 
29.4Lock-free propertyY 
29.5Atomic typesY 
29.6Operations on atomic typesY 
29.7Flag Type and operationsY 
29.8FencesY 
30 Thread support
30.1GeneralY 
30.2RequirementsY 
30.3Threads  
30.3.1Class threadPartialthread::id comparisons not well-defined
30.3.2Namespace this_threadY 
30.4Mutual exclusion  
30.4.1Mutex requirements  
30.4.1.1In general  
30.4.1.2Mutex types  
30.4.1.2.1Class mutexY 
30.4.1.2.2Class recursive_mutexY 
30.4.1.3Timed mutex types  
30.4.1.3.1Class timed_mutexY 
30.4.1.3.2Class recursive_timed_mutexY 
30.4.2Locks  
30.4.2.1Class template lock_guardY 
30.4.2.2Class template unique_lockY 
30.4.3Generic locking algorithmsY 
30.4.4Call once  
30.4.4.1Struct once_flagY 
30.4.4.2Function call_onceY 
30.5Condition variablesY 
30.5.1Class condition_variableY 
30.5.2Class condition_variable_anyY 
30.6Futures  
30.6.1Overview  
30.6.2Error handlingY 
30.6.3Class future_errorY 
30.6.4Shared stateY 
30.6.5Class template promiseY 
30.6.6Class template futureY 
30.6.7Class template shared_futureY 
30.6.8Function template asyncY 
30.6.9Class template packaged_taskY 
Appendix D Compatibility features
D.1Increment operator with bool operand  
D.2register keyword  
D.3Implicit declaration of copy functions  
D.4Dynamic exception specifications  
D.5C standard library headers  
D.6Old iostreams members  
D.7char* streams  
D.8Function objects  
D.9Binders  
D.10auto_ptr  
D.11Violating exception-specifications  

Implementation Specific Behavior

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

20.7.2.2.1 [util.smartptr.shared.const] Only bad_alloc (or types derived from it) will be thrown.

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

21.2.3.2 [char.traits.specializations.char16_t], 21.2.3.3 [char.traits.specializations.char32_t] The types u16streampos and u32streampos are both synonyms for fpos<mbstate_t>. The function eof returns int_type(-1).

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.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 of random_shuffle uses rand as the source of randomness.

26.5.5 [rand.predef] The type default_random_engine is a synonym for minstd_rand0.

26.5.6 [rand.device] The default token argument to the random_device constructor is "default". Other valid arguments are "/dev/random" and "/dev/urandom", which determine the character special file to read random bytes from. The "default" token will read bytes from a hardware RNG if available (currently this only supports the IA-32 RDRAND instruction) otherwise it is equivalent to "/dev/urandom". An exception of type runtime_error will be thrown if a random_device object 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 the rand function introduces data races depends on the C library as the function is not provided by libstdc++.

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

28.7 [re.traits] The blank character class corresponds to the ctype_base::blank mask.

30.2.3 [thread.req.native]/1 native_handle_type and native_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 of native_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 the posix thread model. The value of the native handle is undefined for a thread which is not joinable.

  • mutex and timed_mutex: The native handle type is __gthread_mutex_t* i.e. pthread_mutex_t* for the posix thread model.

  • recursive_mutex and recursive_timed_mutex: The native handle type is __gthread_recursive_mutex_t* i.e. pthread_mutex_t* for the posix thread model.

  • condition_variable: The native handle type is __gthread_cond_t* i.e. pthread_cond_t* for the posix thread model.

30.6.1 [futures.overview]/2 launch 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 language and library features. See dialect options. The pre-defined symbol __cplusplus is used to check for the presence of the required flag.

This page describes the C++14 and library TS support in the GCC 6 series.

Table 1.3. C++ 2014 Implementation Status

PaperTitleStatusComments
N3669 Fixing constexpr member functions without constY 
N3668 exchange() utility functionY 
N3670 Wording for Addressing Tuples by TypeY 
N3656 make_uniqueY 
N3462 std::result_of and SFINAEY 
N3545 An Incremental Improvement to integral_constantY 
N3642 User-defined Literals for Standard Library TypesY 
N3671 Making non-modifying sequence operations more robustY 
N3654 Quoted Strings Library ProposalY 
N3469 Constexpr Library Additions: chronoY 
N3470 Constexpr Library Additions: containersY 
N3471 Constexpr Library Additions: utilitiesY 
N3658 Compile-time integer sequencesY 
N3659 Shared Locking in C++Y 
N3421 Making Operator Functors greater<>Y 
N3657 Adding heterogeneous comparison lookup to associative containersY 
N3655 TransformationTraits ReduxY 
N3644 Null Forward IteratorsPartialOnly affects Debug Mode

Table 1.4. C++ Technical Specifications Implementation Status

PaperTitleStatusComments
N3662 C++ Dynamic ArraysNArray Extensions TS
N3793 A proposal to add a utility class to represent optional objectsYLibrary Fundamentals TS
N3804 Any library proposalYLibrary Fundamentals TS
N3866 Invocation type traits, but dropping function_call_operator.NLibrary Fundamentals TS
N3905 Faster string searching (Boyer-Moore et al.)YLibrary Fundamentals TS
N3915 apply() call a function with arguments from a tupleYLibrary Fundamentals TS
N3916 Polymorphic memory resourcesPartialLibrary Fundamentals TS
N3920 Extending shared_ptr to support arraysYLibrary Fundamentals TS
N3921 string_view: a non-owning reference to a stringYLibrary Fundamentals TS
N3925 A sample proposalYLibrary Fundamentals TS
N3932 Variable Templates For Type TraitsYLibrary Fundamentals TS
N4100 File SystemY Link with -lstdc++fs

C++ 201z

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

This page describes the C++1z and library TS support in the GCC 6 series.

Table 1.5. C++ 201z Implementation Status

PaperTitleStatusComments
N4259 Wording for std::uncaught_exceptionsY 
N4190 Removing auto_ptr, random_shuffle(), And Old <functional> Stuff N 
N4284 Contiguous Iterators YNo code changes required
N4089 Safe conversions in unique_ptr<T[]> Y 
N4277 TriviallyCopyable reference_wrapper Y 
N4258 Cleaning-up noexcept in the LibraryY 
N4279 Improved insertion interface for unique-key mapsY 
N3911 Transformation Trait Alias void_tY 
N4169 A proposal to add invoke function templateY 
N4280 Non-member size() and moreY 
N4366 LWG 2228: Missing SFINAE rule in unique_ptr templated assignment Y 
N4387 Improving pair and tuple, revision 3 Y 
N4389 Wording for bool_constant, revision 1 Y 
N4508 A proposal to add shared_mutex (untimed) (Revision 4)Y 
N4510 Minimal incomplete type support for standard containers, revision 4 Y 
P0013R1 Logical Operator Type Traits (revision 1) Y 

Table 1.6. C++ Technical Specifications Implementation Status

PaperTitleStatusComments
N4076 A generalized callable negatorYLibrary Fundamentals 2 TS
N4273 Uniform Container ErasureYLibrary Fundamentals 2 TS
N4061 Greatest Common Divisor and Least Common MultipleYLibrary Fundamentals 2 TS
N4066 Delimited iteratorsYLibrary Fundamentals 2 TS
N4282 The World's Dumbest Smart PointerYLibrary Fundamentals 2 TS
N4388 Const-Propagating WrapperYLibrary Fundamentals 2 TS
N4391 make_array, revision 4 YLibrary Fundamentals 2 TS
N4502 Support for the C++ Detection Idiom, V2 YLibrary Fundamentals 2 TS
N4519 Source-Code Information Capture NLibrary Fundamentals 2 TS
N4521 Merge Fundamentals V1 into V2 NLibrary Fundamentals 2 TS
P0013R1 Logical Operator Type Traits (revision 1)YLibrary Fundamentals 2 TS

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 by tr1/, for instance <tr1/functional>, <tr1/memory>, and so on.

This page describes the TR1 support in the GCC 6 series.

Table 1.7. C++ TR1 Implementation Status

SectionDescriptionStatusComments
2General Utilities
2.1Reference wrappers  
2.1.1Additions to header <functional> synopsisY 
2.1.2Class template reference_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.2Class bad_weak_ptrY 
2.2.3Class template shared_ptr 

Uses code from boost::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 template weak_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 template enable_shared_from_thisY 
3Function Objects
3.1DefinitionsY 
3.2Additions to <functional> synopsisY 
3.3RequirementsY 
3.4Function return typesY 
3.5Function template mem_fnY 
3.6Function object binders  
3.6.1Class template is_bind_expressionY 
3.6.2Class template is_placeholderY 
3.6.3Function template bindY 
3.6.4PlaceholdersY 
3.7Polymorphic function wrappers  
3.7.1Class bad_function_callY 
3.7.1.1bad_function_call constructorY 
3.7.2Class template function  
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 template variate_generatorY 
5.1.4Random number engine class templatesY 
5.1.4.1Class template linear_congruentialY 
5.1.4.2Class template mersenne_twisterY 
5.1.4.3Class template subtract_with_carryY 
5.1.4.4Class template subtract_with_carry_01Y 
5.1.4.5Class template discard_blockY 
5.1.4.6Class template xor_combineYoperator()() per N2079
5.1.5Engines with predefined parametersY 
5.1.6Class random_deviceY 
5.1.7Random distribution class templatesY 
5.1.7.1Class template uniform_intY 
5.1.7.2Class bernoulli_distributionY 
5.1.7.3Class template geometric_distributionY 
5.1.7.4Class template poisson_distributionY 
5.1.7.5Class template binomial_distributionY 
5.1.7.6Class template uniform_realY 
5.1.7.7Class template exponential_distributionY 
5.1.7.8Class template normal_distributionY 
5.1.7.9Class template gamma_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 template tupleY 
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 template arrayY 
6.2.2.1array constructors, copy, and assignmentY 
6.2.2.2array specialized algorithmsY 
6.2.2.3array sizeY 
6.2.2.4Zero sized arraysY 
6.2.2.5Tuple interface to class template arrayY 
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 template hashY 
6.3.4Unordered associative container classesY 
6.3.4.1Header <unordered_set> synopsisY 
6.3.4.2Header <unordered_map> synopsisY 
6.3.4.3Class template unordered_setY 
6.3.4.3.1unordered_set constructorsY 
6.3.4.3.2unordered_set swapY 
6.3.4.4Class template unordered_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 template unordered_multisetY 
6.3.4.5.1unordered_multiset constructorsY 
6.3.4.5.2unordered_multiset swapY 
6.3.4.6Class template unordered_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.5Namespace tr1::regex_constantsN 
7.5.1Bitmask Type syntax_option_typeN 
7.5.2Bitmask Type regex_constants::match_flag_typeN 
7.5.3Implementation defined error_typeN 
7.6Class regex_errorN 
7.7Class template regex_traitsN 
7.8Class template basic_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 template sub_matchN 
7.9.1sub_match membersN 
7.9.2sub_match non-member operatorsN 
7.10Class template match_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 template regex_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 template regex_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.2Function acosY 
8.1.3Function asinY 
8.1.4Function atanY 
8.1.5Function acoshY 
8.1.6Function asinhY 
8.1.7Function atanhY 
8.1.8Function fabsY 
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.2Function isblankY 
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.2Function hexfloatN 
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.3Function absY 
8.25.4Function divY 
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.2Function iswblankY 
8.33Additions to header <wctype.h>Y 

Implementation Specific Behavior

For behaviour which is specified by the 1998 and 2003 standards, see C++ 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 are Assignable.

C++ TR 24733

This table is based on the table of contents of ISO/IEC TR 24733 Date: 2009-08-28 Extension for the programming language C++ to support decimal floating-point arithmetic

This page describes the TR 24733 support in the GCC 6 series.

Table 1.8. C++ TR 24733 Implementation Status

SectionDescriptionStatusComments
0 Introduction
1 Normative references
2 Conventions
3 Decimal floating-point types
3.1Characteristics of decimal floating-point types  
3.2Decimal Types  
3.2.1Class decimal synopsisPartialMissing declarations for formatted input/output; non-conforming extension for functions converting to integral type
3.2.2Class decimal32PartialMissing 3.2.2.5 conversion to integral type; conforming extension for conversion from scalar decimal floating-point
3.2.3Class decimal64PartialMissing 3.2.3.5 conversion to integral type; conforming extension for conversion from scalar decimal floating-point
3.2.4Class decimal128PartialMissing 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 header limitsN 
3.4Headers cfloat and float.h  
3.4.2Additions to header cfloat synopsisY 
3.4.3Additions to header float.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 to cfenv and fenv.hOutside the scope of GCC 
3.6Additions to cmath and math.hOutside the scope of GCC 
3.7Additions to cstdio and stdio.hOutside the scope of GCC 
3.8Additions to cstdlib and stdlib.hOutside the scope of GCC 
3.9Additions to cwchar and wchar.hOutside the scope of GCC 
3.10FacetsN 
3.11Type traitsN 
3.12Hash functionsN 
4 Notes on C compatibility