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
Implementation Specific Behavior
C++ TR1
Implementation Specific Behavior
C++ TR 24733
The Code: GPL
The Documentation: GPL, FDL
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 mainline GCC SVN, not in any particular release.

Table 1.1. C++ 1998/2003 Implementation Status

18 Language support
18.2Implementation propertiesY 
18.2.1Numeric Limits template numeric_limitsY membersY 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.7Other runtime supportY 
19 Diagnostics
19.1Exception classesY 
19.3Error numbersY 
20 General utilities
20.2Utility components  
20.3Function objects  
20.3.2Arithmetic operationY 
20.3.4Logical operationsY 
20.3.7Adaptors for pointers to functionsY 
20.3.8Adaptors for pointers to membersY 
20.4.1The default allocatorY 
20.4.2Raw storage iteratorY 
20.4.3Temporary buffersY 
20.4.4Specialized algorithmsY 
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 char_traits<char>Y char_traits<wchar_t>Y 
21.2String classesY 
21.3Class template basic_stringY 
21.4Null-terminated sequence utilitiesYC library dependency
22 Localization
22.1.1Class localeY 
22.1.2locale globalsY 
22.1.3Convenience interfaces classificationY conversionsY 
22.2Standard locale categories  
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 template queueY template priority_queueY 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.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.5C LibraryY 
27 Input/output
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.

[] 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. :-)

[]/5 (bad_alloc), [18.5.2]/5 (bad_cast), [18.5.3]/5 (bad_typeid), [18.6.1]/8 (exception), []/5 (bad_exception): The what() member function of class std::exception, and these other classes publicly derived from it, returns the name of the class, e.g. "std::bad_alloc".

[18.5.1]/7 The return value of std::type_info::name() is the mangled type name. You will need to call c++filt and pass the names as command-line parameters to demangle them, or call a runtime demangler function.

[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.

[]/3,4, []/2, [21.3]/6 basic_string::iterator, basic_string::const_iterator, [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. :-)

[]/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.

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

[]/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!

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

[]/16, []/10 The effects of pubsetbuf/setbuf are described in the Input and Output chapter.

[]/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 mainline GCC SVN, not in any particular release.

Table 1.2. C++ 2011 Implementation Status

18 Language support
18.3Implementation properties  
18.3.2Numeric Limits template numeric_limitsY membersY 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.5Exception PropagationY 
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.2Exception classesY 
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.2Utility components  
20.2.3forward and move helpersY 
20.2.4Function template declvalY 
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.4.1In general  
20.4.2Class template tuple creation functionsY helper classesY accessY operatorsY traitsY specialized algorithmsY 
20.5Class template bitsetY 
20.5.1bitset constructorsY 
20.5.2bitset membersY 
20.5.3bitset hash supportY 
20.5.4bitset operatorsY 
20.6.1In general  
20.6.2Header <memory> synopsis  
20.6.3Pointer traitsY 
20.6.4Pointer safetyY 
20.6.6Allocator argument tagY 
20.6.8Allocator traitsY 
20.6.9The default allocatorY 
20.6.10Raw storage iteratorY 
20.6.11Temporary buffersY 
20.6.12Specialized algorithms 
20.6.13C libraryY 
20.7Smart pointers  
20.7.1Class template unique_ptrY 
20.7.2Shared-ownership pointersY bad_weak_ptrY template shared_ptrY Uses code from boost::shared_ptr. template weak_ptrY template emable_shared_from_thisY atomic accessY pointer hash supportY 
20.8Function objects  
20.8.3Class template reference_wrapperY 
20.8.4Arithmetic operationY 
20.8.6Logical operationsY 
20.8.7Bitwise operationsY 
20.8.9Function template bindY 
20.8.10Function template mem_fnY 
20.8.11Polymorphic function wrappers bad_function_callY template functionPartialMissing allocator support
20.8.12Class template hashY 
20.9Metaprogramming and type traits  
20.9.2Header <type_traits> synopsis  
20.9.3Helper classesY 
20.9.4Unary Type TraitsY type categoriesY type traitsY propertiesY 
20.9.5Type property queriesY 
20.9.6Relationships between typesY 
20.9.7Transformations between types modificationsY modificationsY modificationsY modificationsY modificationsY 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 of common_typeY 
20.11.5Class template durationY 
20.11.6Class template time_pointY 
20.11.7Clocks system_clockY steady_clockY 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.2Character traits  
21.2.1Character traits requirementsY 
21.2.2traits typedefsY 
21.2.3char_traits specializations char_traits<char>Y char_traits<char16_t>Y char_traits<char32_t>Y 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.2Header <locale> synopsisY 
22.3.1Class localeY 
22.3.2locale globalsY 
22.3.3Convenience interfaces classificationY conversionsY conversionsY conversionsY 
22.4Standard locale categories  
22.4.1The ctype categoryY 
22.4.2The numeric category 
22.4.3The numeric punctuation facetY 
22.4.4The collate categoryY 
22.4.5The time category template time_getY template time_get_bynameY template time_putY template time_put_bynameY 
22.4.6The monetary category template money_getY template money_putY template money_punctY 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.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.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.2Non-modifying sequence operationsY 
25.3Mutating sequence operationsY 
25.4Sorting and related operationsY 
25.5C library algorithmsY 
26 Numerics
26.2Numeric type requirementsY 
26.3The floating-point environmentY 
26.4Complex numbersY 
26.5Random number generation  
26.5.2Header <random> synopsis  
26.5.3Random number engine class templates template linear_congruential_engineY template mersenne_twister_engineY template subtract_with_carry_engineY 
26.5.4Random number engine adaptor class templates template discard_block_engineY template independent_bits_engineY template shuffle_order_engineY 
26.5.5Engines and engine adaptors with predefined parametersY 
26.5.6Class random_deviceY 
26.5.7Utilities seed_seqY template generate_canonicalY 
26.5.8Random number distribution class templates distributions template uniform_int_distributionY template uniform_real_distributionY distributions bernoulli_distributionY template binomial_distributionY template geometric_distributionY template negative_binomial_distributionY distributions template poisson_distributionY template exponential_distributionY template gamma_distributionY template weibull_distributionY template extreme_value_distributionY distributions template normal_distributionY template lognormal_distributionY template chi_squared_distributionY template cauchy_distributionY template fisher_f_distributionY template student_t_distributionY distributions template discrete_distributionY template piecewise_constant_distributionY 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.8C LibraryY 
27 Input/output library
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.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.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.2Header <atomic> synopsisY 
29.3Order and consistencyPartial 
29.4Lock-free propertyY 
29.5Atomic typesY 
29.6Operations on atomic typesY 
29.7Flag Type and operationsY 
30 Thread support
30.3.1Class threadPartialthread::id comparisons not well-defined
30.3.2Namespace this_threadY 
30.4Mutual exclusion  
30.4.1Mutex requirements general types mutexY recursive_mutexY mutex types timed_mutexY recursive_timed_mutexY 
30.4.2Locks template lock_guardY template unique_lockY 
30.4.3Generic locking algorithmsY 
30.4.4Call once once_flagY call_onceY 
30.5Condition variablesY 
30.5.1Class condition_variableY 
30.5.2Class condition_variable_anyY 
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.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. [res.on.exception.handling] There are no implementation-defined exception classes, only standard exception classes (or classes derived from them) will be thrown. [] The error_category for errors originating outside the OS, and the possible error code values for each error category, should be documented here. [new.badlength] what() returns "std::bad_array_new_length". [allocator.member]/5 Over-aligned types are not supported by std::allocator. [util.smartptr.shared.const] When a shared_ptr constructor fails bad_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. [util.smartptr.weakptr] what() returns "bad_weak_ptr". []/1 There are 29 placeholders defined and the placeholder types are CopyAssignable. [time.clock.system]/3, /4 Time point values are truncated to time_t values. There is no loss of precision for conversions in the other direction.

20.15.7 [meta.trans]/2 aligned_storage does not support extended alignment. [char.traits.specializations.char16_t], [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.3.1 [locale] There is one global locale for the whole program, not per-thread. [locale.time.get.virtuals], [locale.time.put.virtuals] Additional supported formats should be documented here. [locale.messages.virtuals] The mapping should be documented here. [array.overview] array<T, N>::iterator is T* and array<T, N>::const_iterator is const T*. [], [unord.multimap.cnstr], [unord.set.cnstr], [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. [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++. [stringbuf.cons] Whether the sequence pointers are copied by the basic_stringbuf move constructor should be documented here. [filebuf.cons] Whether the sequence pointers are copied by the basic_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 and error_type are unscoped enumeration types.

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

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

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 mainline GCC SVN, not in any particular release.

Table 1.3. C++ 2014 Implementation Status

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

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 section describes the C++1z and library TS support in mainline GCC SVN, not in any particular release.

The following table lists new library features that have been accepted into the C++1z working draft. The "Proposal" column provides a link to the ISO C++ committee proposal that describes the feature, while the "Status" column indicates the first version of GCC that contains an implementation of this feature (if it has been implemented). The "SD-6 Feature Test" column shows the corresponding macro or header from SD-6: Feature-testing recommendations for C++.

Table 1.5. C++ 201z Implementation Status

Library FeatureProposalStatusSD-6 Feature Test
constexpr std::hardware_{constructive,destructive}_interference_size P0154R1 No __cpp_lib_hardware_interference_size >= 201603
Core Issue 1776: Replacement of class objects containing reference members P0137R1 7 __cpp_lib_launder >= 201606
Wording for std::uncaught_exceptions N4259 6.1__cpp_lib_uncaught_exceptions >= 201411
Variant: a type-safe union for C++17 P0088R3 7 __has_include(<variant>)
Library Fundamentals V1 TS Components: optional P0220R1 7 __has_include(<optional>)
Library Fundamentals V1 TS Components: any P0220R1 7 __has_include(<any>)
Library Fundamentals V1 TS Components: string_view P0220R1 7 __has_include(<string_view>)
Library Fundamentals V1 TS Components: memory_resource P0220R1 No __has_include(<memory_resource>)
Library Fundamentals V1 TS Components: apply P0220R1 7 __cpp_lib_apply >= 201603
Library Fundamentals V1 TS Components: shared_ptr<T[]> P0220R1 7 __cpp_lib_shared_ptr_arrays >= 201603
Library Fundamentals V1 TS Components: Searchers P0220R1 7 __cpp_lib_boyer_moore_searcher >= 201603
Library Fundamentals V1 TS Components: Sampling P0220R1 7 __cpp_lib_sample >= 201603
Constant View: A proposal for a std::as_const helper function template P0007R1 7 __cpp_lib_as_const >= 201510
Improving pair and tuple N4387 6.1 N/A
make_from_tuple: apply for construction P0209R2 7 __cpp_lib_make_from_tuple >= 201606
Removing auto_ptr, random_shuffle(), And Old <functional> Stuff N4190 No (kept for backwards compatibility) 
Deprecating Vestigial Library Parts in C++17 P0174R2 No  
Making std::owner_less more flexible P0074R0 7 __cpp_lib_transparent_operators >= 201510
std::addressof should be constexpr LWG2296 7 __cpp_lib_addressof_constexpr >= 201603
Safe conversions in unique_ptr<T[]> N4089 6  
LWG 2228: Missing SFINAE rule in unique_ptr templated assignment N4366 6  
Re-enabling shared_from_this P0033R1 7 __cpp_lib_enable_shared_from_this >= 201603
A proposal to add invoke function template N4169 6.1 __cpp_lib_invoke >= 201411
TriviallyCopyable reference_wrapper N4277 5.1  
Adopt not_fn from Library Fundamentals 2 for C++17 P0005R4 7 __cpp_lib_not_fn >= 201603
Fixes for not_fn P0358R1 7  
Fixing a design mistake in the searchers interface in Library Fundamentals P0253R1 7  
Extending memory management tools P0040R3 7
shared_ptr::weak_type P0163R0 7 __cpp_lib_shared_ptr_weak_type >= 201606
Transformation Trait Alias void_t N3911 6.1 __cpp_lib_void_t >= 201411
Wording for bool_constant, revision 1 N4389 6.1 __cpp_lib_bool_constant >= 201505
Adopt Type Traits Variable Templates from Library Fundamentals TS for C++17 P0006R0 7 __cpp_lib_type_trait_variable_templates >= 201510
Logical Operator Type Traits P0013R1 6.1 __cpp_lib_logical_traits >= 201510
Adding [nothrow-]swappable traits P0185R1 7 (__is_swappable available since 6.1) __cpp_lib_is_swappable >= 201603
is_callable, the missing INVOKE related trait P0077R2 7 __cpp_lib_is_callable >= 201603
has_unique_object_representations P0258R2 7 __cpp_lib_has_unique_object_representations >= 201606
Ordered by default P0181R1 No __cpp_lib_default_order >= 201606
Polishing <chrono> P0092R1 7 __cpp_lib_chrono >= 201510
Integrating std::string_view and std::string P0254R2 7
Give 'std::string' a non-const '.data()' member function P0272R1 7
Cleaning-up noexcept in the Library N4258 6.1 __cpp_lib_allocator_traits_is_always_equal >= 201411
Contiguous Iterators N4284 N/A 
Minimal incomplete type support for standard containers N4510 6.2 (3.0) __cpp_lib_incomplete_container_elements >= 201505 (the feature was always supported, but the macro was not defined until GCC 6.2)
Emplace return type P0084R2 7  
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 Sets P0083R3 7 __cpp_lib_node_extract >= 201606
Non-member size() and more N4280 6.1 __cpp_lib_nonmember_container_access >= 201411
A Proposal to Add Constexpr Modifiers to reverse_iterator, move_iterator, array and Range Access P0031R0 7 __cpp_lib_array_constexpr >= 201603
The Parallelism TS Should be Standardized P0024R2 No __has_include(<execution>) , __cpp_lib_parallel_algorithm >= 201603
An algorithm to "clamp" a value between a pair of boundary values P0025R0 7 __cpp_lib_clamp >= 201603
Adopt Selected Library Fundamentals V2 Components for C++17 P0295R0 7 __cpp_lib_gcd >= 201606 , __cpp_lib_lcm >= 201606
Proposal to Introduce a 3-Argument Overload to std::hypot P0030R1 7 __cpp_lib_hypot >= 201603
Mathematical Special Functions for C++17 P0226R1 7 (6.1) __cpp_lib_math_special_functions >= 201603 (for GCC 6 or pre-C++17 define __STDCPP_WANT_MATH_SPEC_FUNCS__ to a non-zero value and test for __STDCPP_MATH_SPEC_FUNCS__ >= 201003L)
Adopt the File System TS for C++17 P0218R1 No __has_include(<filesystem>) , __cpp_lib_filesystem >= 201603
Relative Paths for Filesystem P0219R1 No  
Adapting string_view by filesystem paths P0392R0 No  
constexpr atomic<T>::is_always_lock_free P0152R1 7 __cpp_lib_atomic_is_always_lock_free >= 201603
A proposal to add shared_mutex (untimed) (Revision 4) N4508 6.1 __cpp_lib_shared_mutex >= 201505
Variadic lock_guard P0156R0 No __cpp_lib_lock_guard_variadic >= 201510

Table 1.6. C++ Technical Specifications Implementation Status

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

Implementation Specific Behavior

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

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

20.7.2 [variant.variant] Whether variant supports over-aligned types should be documented here.

20.7.10 [variant.bad.access] what() returns "Unexpected index". [memory.resource.pool.options] The limits for maximum number of blocks and largest allocation size supported by pool_options should be documented here. [memory.resource.monotonic.buffer.ctor] The default next_buffer_size and growth factor should be documented here. [meta.unary.prop] The predicate condition for has_unique_object_representations is true for all scalar types except floating point types.

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

22.4.2 [string.view.template] basic_string_view<C, T>::iterator is C* and basic_string_view<C, T>::const_iterator is const C*.

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

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

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

26.9.5 [sf.cmath] The effect of calling the mathematical special functions with large inputs should be documented here. [fs.conform.9945] The behavior of the filesystem library implementation will depend on the target operating system. Some features will not be not supported on some targets.

27.10.6 [fs.filesystem.syn] The clock used for file times is std::chrono::system_clock.

27.10.8 [path.generic] dot-dot in the root-directory refers to the root-directory itself.

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 mainline GCC SVN, not in any particular release.

Table 1.7. C++ TR1 Implementation Status

2General Utilities
2.1Reference wrappers  
2.1.1Additions to header <functional> synopsisY 
2.1.2Class template reference_wrapper construct/copy/destroyY assignmentY accessY invocationY 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. constructorsY destructorY assignmentY modifiersY observersY comparisonY I/OY specialized algorithmsY castsY 
2.2.4Class template weak_ptr constructorsY destructorY assignmentY modifiersY observersY comparisonY specialized algorithmsY 
2.2.5Class template enable_shared_from_thisY 
3Function Objects
3.2Additions to <functional> synopsisY 
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.7Polymorphic function wrappers  
3.7.1Class bad_function_callY constructorY 
3.7.2Class template function construct/copy/destroyY modifiersY capacityY invocationY target accessY operatorsY pointer comparison operatorsY algorithmsY 
4Metaprogramming and type traits
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.2Header <random> synopsisY 
5.1.3Class template variate_generatorY 
5.1.4Random number engine class templatesY template linear_congruentialY template mersenne_twisterY template subtract_with_carryY template subtract_with_carry_01Y template discard_blockY template xor_combineYoperator()() per N2079
5.1.5Engines with predefined parametersY 
5.1.6Class random_deviceY 
5.1.7Random distribution class templatesY template uniform_intY bernoulli_distributionY template geometric_distributionY template poisson_distributionY template binomial_distributionY template uniform_realY template exponential_distributionY template normal_distributionY template gamma_distributionY 
5.2Mathematical special functionsY 
5.2.1Additions to header <cmath> synopsisY Laguerre polynomialsY Legendre functionsY functionY elliptic integral of the first kindY elliptic integral of the second kindY elliptic integral of the third kindY hypergeometric functionsY modified cylindrical Bessel functionsY Bessel functions (of the first kind)Y modified cylindrical Bessel functionsY Neumann functionsY elliptic integral of the first kindY elliptic integral of the second kindY elliptic integral of the third kindY integralY polynomialsY functionsY polynomialsY polynomialsY zeta functionY Bessel functions (of the first kind)Y associated Legendre functionsY Neumann functionsY 
5.2.2Additions to header <math.h> synopsisY 
6.1Tuple typesY 
6.1.1Header <tuple> synopsisY 
6.1.2Additions to header <utility> synopsisY 
6.1.3Class template tupleY creation functionsY helper classesY accessY operatorsY 
6.2Fixed size arrayY 
6.2.1Header <array> synopsisY 
6.2.2Class template arrayY constructors, copy, and assignmentY specialized algorithmsY sizeY sized arraysY interface to class template arrayY 
6.3Unordered associative containersY 
6.3.1Unordered associative container requirementsY safety guaranteesY 
6.3.2Additions to header <functional> synopsisY 
6.3.3Class template hashY 
6.3.4Unordered associative container classesY <unordered_set> synopsisY <unordered_map> synopsisY template unordered_setY constructorsY swapY template unordered_mapY constructorsY element accessY swapY template unordered_multisetY constructorsY swapY template unordered_multimapY constructorsY swapY 
7Regular Expressions
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 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.12Regular expression IteratorsN 
7.12.1Class template regex_iteratorN constructorsN comparisonsN dereferenceN incrementN 
7.12.2Class template regex_token_iteratorN constructorsN comparisonsN dereferenceN incrementN 
7.13Modified ECMAScript regular expression grammarN 
8C Compatibility
8.1Additions to header <complex>Y 
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.2Function isblankY 
8.5Additions to header <ctype.h>Y 
8.6Header <cfenv>Y 
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.2Function hexfloatN 
8.11Header <cinttypes>Y 
8.11.1SynopsisYDR 557
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.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.23The header <stdint.h>Y 
8.24Additions to header <cstdio>Y 
8.24.3Additional format specifiersYC library dependency
8.24.4Additions to header <stdio.h>Y 
8.25Additions to header <cstdlib>Y 
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.3Additional wide format specifiersYC library dependency
8.31Additions to header <wchar.h>Y 
8.32Additions to header <cwctype>Y 
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 []/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 mainline GCC SVN, not in any particular release.

Table 1.8. C++ TR 24733 Implementation Status

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 conversion to integral type; conforming extension for conversion from scalar decimal floating-point
3.2.3Class decimal64PartialMissing conversion to integral type; conforming extension for conversion from scalar decimal floating-point
3.2.4Class decimal128PartialMissing 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.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.11Type traitsN 
3.12Hash functionsN 
4 Notes on C compatibility