This status table is based on the table of contents of ISO/IEC 14882:2003.
This section describes the C++ support in the GCC 12 release series,
not in any particular release.
Table 1.1. C++ 1998/2003 Implementation Status
Section
Description
Status
Comments
18
Language support
18.1
Types
Y
18.2
Implementation properties
Y
18.2.1
Numeric Limits
18.2.1.1
Class template numeric_limits
Y
18.2.1.2
numeric_limits members
Y
18.2.1.3
float_round_style
Y
18.2.1.4
float_denorm_style
Y
18.2.1.5
numeric_limits specializations
Y
18.2.2
C Library
Y
18.3
Start and termination
Y
18.4
Dynamic memory management
Y
18.5
Type identification
18.5.1
Class type_info
Y
18.5.2
Class bad_cast
Y
18.5.3
Class bad_typeid
Y
18.6
Exception handling
18.6.1
Class exception
Y
18.6.2
Violation exception-specifications
Y
18.6.3
Abnormal termination
Y
18.6.4
uncaught_exception
Y
18.7
Other runtime support
Y
19
Diagnostics
19.1
Exception classes
Y
19.2
Assertions
Y
19.3
Error numbers
Y
20
General utilities
20.1
Requirements
Y
20.2
Utility components
20.2.1
Operators
Y
20.2.2
pair
Y
20.3
Function objects
20.3.1
Base
Y
20.3.2
Arithmetic operation
Y
20.3.3
Comparisons
Y
20.3.4
Logical operations
Y
20.3.5
Negators
Y
20.3.6
Binders
Y
20.3.7
Adaptors for pointers to functions
Y
20.3.8
Adaptors for pointers to members
Y
20.4
Memory
20.4.1
The default allocator
Y
20.4.2
Raw storage iterator
Y
20.4.3
Temporary buffers
Y
20.4.4
Specialized algorithms
Y
20.4.4.1
uninitialized_copy
Y
20.4.4.2
uninitialized_fill
Y
20.4.4.3
uninitialized_fill_n
Y
20.4.5
Class template auto_ptr
Y
20.4.6
C library
Y
21
Strings
21.1
Character traits
21.1.1
Character traits requirements
Y
21.1.2
traits typedef
Y
21.1.3
char_traits specializations
21.1.3.1
struct char_traits<char>
Y
21.1.3.2
struct char_traits<wchar_t>
Y
21.2
String classes
Y
21.3
Class template basic_string
Y
21.4
Null-terminated sequence utilities
Y
C library dependency
22
Localization
22.1
Locales
22.1.1
Class locale
Y
22.1.2
locale globals
Y
22.1.3
Convenience interfaces
22.1.3.1
Character classification
Y
22.1.3.2
Character conversions
Y
22.2
Standard locale categories
22.2.1
ctype
Y
22.2.2
Numeric
22.2.2.1
num_get
Y
22.2.2.2
num_put
Y
22.2.3
num_punct
Y
22.2.4
collate
Y
22.2.5
Time
22.2.5.1
time_get
Y
22.2.5.2
time_get_byname
Y
22.2.5.3
time_put
Y
22.2.5.3
time_put_byname
Y
22.2.6
Monetary
22.2.6.1
money_get
Y
22.2.6.2
money_put
Y
22.2.6.3
money_punct
Y
22.2.6.4
money_punct_byname
Y
22.2.7
messages
Y
22.2.8
Program-defined facets
Y
22.3
C Library Locales
Y
23
Containers
23.1
Container requirements
Y
23.2
Sequence containers
23.2.1
Class template deque
Y
23.2.2
Class template list
Y
23.2.3
Adaptors
23.2.3.1
Class template queue
Y
23.2.3.2
Class template priority_queue
Y
23.2.3.3
Class template stack
Y
23.2.4
Class template vector
Y
23.2.5
Class vector<bool>
Y
23.3
Associative containers
23.3.1
Class template map
Y
23.3.2
Class template multimap
Y
23.3.3
Class template set
Y
23.3.4
Class template multiset
Y
24
Iterators
24.1
Requirements
Y
24.2
Header <iterator> synopsis
Y
24.3
Iterator primitives
Y
24.4
Predefined iterators and Iterator adaptors
24.4.1
Reverse iterators
Y
24.4.2
Insert iterators
Y
24.5
Stream iterators
24.5.1
Class template istream_iterator
Y
24.5.2
Class template ostream_iterator
Y
24.5.3
Class template istreambuf_iterator
Y
24.5.4
Class template ostreambuf_iterator
Y
25
Algorithms
25.1
Non-modifying sequence operations
Y
25.2
Mutating sequence operations
Y
25.3
Sorting and related operations
Y
25.4
C library algorithms
Y
26
Numerics
26.1
Numeric type requirements
Y
26.2
Complex numbers
Y
26.3
Numeric arrays
26.3.1
Header <valarray> synopsis
Y
26.3.2
Class template valarray
Y
26.3.3
valarray non-member operations
Y
26.3.4
Class slice
Y
26.3.5
Class template slice_array
Y
26.3.6
Class gslice
Y
26.3.7
Class template gslice_array
Y
26.3.8
Class template mask_array
Y
26.3.9
Class template indirect_array
Y
26.4
Generalized numeric operations
26.4.1
accumulate
Y
26.4.2
inner_product
Y
26.4.3
partial_sum
Y
26.4.4
adjacent_difference
Y
26.4.5
iota
Y
26.5
C Library
Y
27
Input/output
27.1
Requirements
Y
27.2
Forward declarations
Y
27.3
Standard iostream objects
Y
27.3.1
Narrow stream objects
Y
27.3.2
Wide stream objects
Y
27.4
Iostreams base classes
Y
27.5
Stream buffers
Y
27.6
Formatting and manipulators
Y
27.7
String-based streams
Y
27.8
File-based streams
Y
Appendix D
Compatibility features
D.1
Increment operator with bool operand
D.2
static keyword
D.3
Access declarations
D.4
Implicit conversion from const strings
D.5
C standard library headers
D.6
Old iostreams members
D.7
char* 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, 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.
[21.1.3.1]/3,4,
[21.1.3.2]/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. :-)
[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.
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 stable
since that release.
This status table is based on the table of contents of ISO/IEC 14882:2011.
This section describes the C++11 support in the GCC 12 release series,
not in any particular release.
Table 1.2. C++ 2011 Implementation Status
Section
Description
Status
Comments
18
Language support
18.1
General
18.2
Types
Y
18.3
Implementation properties
18.3.2
Numeric Limits
18.3.2.3
Class template numeric_limits
Y
18.3.2.4
numeric_limits members
Y
18.3.2.5
float_round_style
N
18.3.2.6
float_denorm_style
N
18.3.2.7
numeric_limits specializations
Y
18.3.3
C Library
Y
18.4
Integer types
18.4.1
Header <cstdint> synopsis
Y
18.5
Start and termination
Partial
C library dependency for quick_exit, at_quick_exit
Engines and engine adaptors with predefined parameters
Y
26.5.6
Class random_device
Y
26.5.7
Utilities
26.5.7.1
Class seed_seq
Y
26.5.7.2
Function template generate_canonical
Y
26.5.8
Random number distribution class templates
26.5.8.2
Uniform distributions
26.5.8.2.1
Class template uniform_int_distribution
Y
26.5.8.2.2
Class template uniform_real_distribution
Y
26.5.8.3
Bernoulli distributions
26.5.8.3.1
Class bernoulli_distribution
Y
26.5.8.3.2
Class template binomial_distribution
Y
26.5.8.3.3
Class template geometric_distribution
Y
26.5.8.3.4
Class template negative_binomial_distribution
Y
26.5.8.4
Poisson distributions
26.5.8.4.1
Class template poisson_distribution
Y
26.5.8.4.2
Class template exponential_distribution
Y
26.5.8.4.3
Class template gamma_distribution
Y
26.5.8.4.4
Class template weibull_distribution
Y
26.5.8.4.5
Class template extreme_value_distribution
Y
26.5.8.5
Normal distributions
26.5.8.5.1
Class template normal_distribution
Y
26.5.8.5.2
Class template lognormal_distribution
Y
26.5.8.5.3
Class template chi_squared_distribution
Y
26.5.8.5.4
Class template cauchy_distribution
Y
26.5.8.5.5
Class template fisher_f_distribution
Y
26.5.8.5.6
Class template student_t_distribution
Y
26.5.8.6
Sampling distributions
26.5.8.6.1
Class template discrete_distribution
Y
26.5.8.6.2
Class template piecewise_constant_distribution
Y
26.5.8.6.3
Class template piecewise_linear_distribution
Y
26.6
Numeric arrays
26.6.1
Header <valarray> synopsis
Y
26.6.2
Class template valarray
Y
26.6.3
valarray non-member operations
Y
26.6.4
Class slice
Y
26.6.5
Class template slice_array
Y
26.6.6
The gslice class
Y
26.6.7
Class template gslice_array
Y
26.6.8
Class template mask_array
Y
26.6.9
Class template indirect_array
Y
26.6.10
valarray range access
Y
26.7
Generalized numeric operations
26.7.1
Header <numeric> synopsis
Y
26.7.2
Accumulate>
Y
26.7.3
Inner product
Y
26.7.4
Partial sum
Y
26.7.5
Adjacent difference
Y
26.7.6
Iota
Y
26.8
C Library
Y
27
Input/output library
27.1
General
Y
27.2
Iostreams requirements
Y
27.2.1
Imbue Limitations
Y
27.2.2
Positioning Type Limitations
Y
27.2.3
Thread safety
Partial
27.3
Forward declarations
Y
27.4
Standard iostream objects
Y
27.4.1
Overview
Y
27.4.2
Narrow stream objects
Y
27.4.3
Wide stream objects
Y
27.5
Iostreams base classes
Y
27.6
Stream buffers
Y
27.7
Formatting and manipulators
Y
27.8
String-based streams
Y
27.9
File-based streams
Y
28
Regular expressions
28.1
General
Y
28.2
Definitions
Y
28.3
Requirements
Y
28.4
Header <regex> synopsis
Y
28.5
Namespace std::regex_constants
Y
28.6
Class regex_error
Y
28.7
Class template regex_traits
Partial
transform_primary is not correctly implemented
28.8
Class template basic_regex
Y
28.9
Class template sub_match
Y
28.10
Class template match_results
Y
28.11
Regular expression algorithms
Y
28.12
Regular expression Iterators
Y
28.13
Modified ECMAScript regular expression grammar
Y
29
Atomic operations
29.1
General
Y
29.2
Header <atomic> synopsis
Y
29.3
Order and consistency
Y
29.4
Lock-free property
Y
29.5
Atomic types
Y
29.6
Operations on atomic types
Y
29.7
Flag Type and operations
Y
29.8
Fences
Y
30
Thread support
30.1
General
Y
30.2
Requirements
Y
30.3
Threads
30.3.1
Class thread
Partial
thread::id comparisons not well-defined
30.3.2
Namespace this_thread
Y
30.4
Mutual exclusion
30.4.1
Mutex requirements
30.4.1.1
In general
30.4.1.2
Mutex types
30.4.1.2.1
Class mutex
Y
30.4.1.2.2
Class recursive_mutex
Y
30.4.1.3
Timed mutex types
30.4.1.3.1
Class timed_mutex
Y
30.4.1.3.2
Class recursive_timed_mutex
Y
30.4.2
Locks
30.4.2.1
Class template lock_guard
Y
30.4.2.2
Class template unique_lock
Y
30.4.3
Generic locking algorithms
Y
30.4.4
Call once
30.4.4.1
Struct once_flag
Y
30.4.4.2
Function call_once
Y
Exception support is broken on non-Linux targets.
See PR
66146.
30.5
Condition variables
Y
30.5.1
Class condition_variable
Y
30.5.2
Class condition_variable_any
Y
30.6
Futures
30.6.1
Overview
30.6.2
Error handling
Y
30.6.3
Class future_error
Y
30.6.4
Shared state
Y
30.6.5
Class template promise
Y
30.6.6
Class template future
Y
30.6.7
Class template shared_future
Y
30.6.8
Function template async
Y
30.6.9
Class template packaged_task
Y
Appendix D
Compatibility features
D.1
Increment operator with bool operand
D.2
register keyword
D.3
Implicit declaration of copy functions
D.4
Dynamic exception specifications
D.5
C standard library headers
Y
D.6
Old iostreams members
Y
D.7
char* streams
Y
D.8
Function objects
Y
D.9
Binders
Y
D.10
auto_ptr
Y
D.11
Violating exception-specifications
Y
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.
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]
The error_category for errors originating outside
the OS, and the possible error code values for each error category,
should be documented here.
20.6.9.1 [allocator.member]/5
Over-aligned types are not supported by
std::allocator.
20.7.2.2.1 [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.
20.8.9.1.3 [func.bind.place]/1 There are 29
placeholders defined and the placeholder types are
CopyAssignable.
20.11.7.1 [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]/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 types u16streampos and
u32streampos are both synonyms for
fpos<mbstate_t>.
The function eof returns int_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 that to_int_type never
returns the same value as eof, 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 is T* and
array<T, N>::const_iterator is
const 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 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 token parameter of the
random_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 MSVCRT rand_s function.
This token is only valid for mingw-w64 targets.
"rdseed", "rdrand" or "rdrnd"
Use the IA-32 RDSEED or RDRAND
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.0 DARN
("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 a
mersenne_twister_engine will be used.
An integer seed value can be used as the token and will be converted
to an unsigned long using strtoul.
These tokens are only valid when no other source of random bytes
is available.
An exception of type runtime_error will be
thrown if a random_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 the
rand 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 the
basic_stringbuf move constructor should be
documented here.
27.9.1.2 [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]/1native_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, timed_mutex
The native handle type is __gthread_mutex_t* i.e.
pthread_mutex_t* for the posix
thread model.
recursive_mutex, 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]/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 language
and library
features. See dialect
options. The pre-defined symbol
__cplusplus is used to check for the
presence of the required flag.
GCC 6.1 was the first release with non-experimental C++14 support,
so the API and ABI of features added in C++14 is only stable
since that release.
This status table is based on the table of contents of ISO/IEC 14882:2014.
Some subclauses are not shown in the table where the content is unchanged
since C++11 and the implementation is complete.
This section describes the C++14 and library TS support in the GCC 12 release series,
not in any particular release.
Table 1.3. C++ 2014 Implementation Status
Section
Description
Status
Comments
18
Language support
18.1
General
18.2
Types
Y
18.3
Implementation properties
18.3.2
Numeric Limits
18.3.2.3
Class template numeric_limits
Y
18.3.2.4
numeric_limits members
Y
18.3.2.5
float_round_style
N
18.3.2.6
float_denorm_style
N
18.3.2.7
numeric_limits specializations
Y
18.3.3
C Library
Y
18.4
Integer types
18.4.1
Header <cstdint> synopsis
Y
18.5
Start and termination
Partial
C library dependency for quick_exit, at_quick_exit
18.6
Dynamic memory management
Y
18.7
Type identification
18.7.1
Class type_info
Y
18.7.2
Class bad_cast
Y
18.7.3
Class bad_typeid
Y
18.8
Exception handling
18.8.1
Class exception
Y
18.8.2
Class bad_exception
Y
18.8.3
Abnormal termination
Y
18.8.4
uncaught_exception
Y
18.8.5
Exception Propagation
Y
18.8.6
nested_exception
Y
18.9
Initializer lists
18.9.1
Initializer list constructors
Y
18.9.2
Initializer list access
Y
18.9.3
Initializer list range access
Y
18.10
Other runtime support
Y
19
Diagnostics
19.1
General
19.2
Exception classes
Y
19.3
Assertions
Y
19.4
Error numbers
Y
19.5
System error support
19.5.1
Class error_category
Y
19.5.2
Class error_code
Y
19.5.3
Class error_condition
Y
19.5.4
Comparison operators
Y
19.5.5
Class system_error
Y
20
General utilities
20.1
General
20.2
Utility components
20.2.1
Operators
Y
20.2.2
swap
Y
20.2.3
exchange
Y
20.2.4
forward/move helpers
Y
20.2.5
Function template declval
Y
20.3
Pairs
Y
20.4
Tuples
Y
20.5
Compile-time integer sequences
20.5.2
Class template integer_sequence
Y
20.5.3
Alias template make_integer_sequence
Y
20.6
Class template bitset
Y
20.7
Memory
Y
20.8
Smart pointers
20.8.1
Class template unique_ptr
Y
20.8.1.1
Default deleters
Y
20.8.1.2
unique_ptr for single objects
Y
20.8.1.3
unique_ptr for array objects with a runtime length
2.1 POSIX conformance [fs.conform.9945]
The behavior of the filesystem library implementation will depend on
the target operating system. Some features will not be supported
on some targets. Symbolic links and file permissions
are not supported on Windows.
15.30 Rename [fs.op.rename]
On Windows, experimental::filesystem::rename
is implemented by calling MoveFileExW and so
does not meet the requirements of POSIX rename
when one or both of the paths resolves to an existing directory.
Specifically, it is possible to rename a directory so it replaces
a non-directory (POSIX requires an error in that case),
and it is not possible to rename a directory to replace another
directory (POSIX requires that to work if the directory being
replaced is empty).
C++ 2017
In this implementation the -std=gnu++17 or
-std=c++17 flag must be used to enable language
and library
features. See dialect
options. The pre-defined symbol
__cplusplus is used to check for the
presence of the required flag.
GCC 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 stable
since that release.
This section describes the C++17 and library TS support in the GCC 12 release series,
not in any particular release.
The following table lists new library features that are included in
the C++17 standard. 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++.
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 the
header 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 2018
or 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 from
GCC 7.1 onwards. For GCC 6.x or for C++11/C++14 define
__STDCPP_WANT_MATH_SPEC_FUNCS__ to a non-zero value
and test for __STDCPP_MATH_SPEC_FUNCS__ >= 201003L.
The following status table is based on the table of contents of
ISO/IEC 14882:2017.
Some subclauses are not shown in the table where the content is unchanged
since C++14 and the implementation is complete.
Table 1.6. C++ 2017 Implementation Status
Section
Description
Status
Comments
21
Language support
21.1
General
21.2
Common definitions
21.3
Implementation properties
21.3.1
General
21.3.2
Header <limits> synopsis
21.3.3
Floating-point type properties
21.3.3.1
float_round_style
N
21.3.3.2
float_denorm_style
N
21.3.4
Class template numeric_limits
Y
21.3.5
Header <climits> synopsis
Y
21.3.6
Header <cfloat> synopsis
Y
21.4
Integer types
21.4.1
Header <cstdint> synopsis
Y
21.5
Start and termination
Partial
C library dependency for quick_exit, at_quick_exit
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.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.12.5.2 [memory.resource.pool.options]
Let S equal numeric_limits<size_t>::digits.
The limit for maximum number of blocks in a chunk is given by
2N-1,
where N is min(19, 3 + S/2).
The largest allocation size that will be allocated from a pool is
222
when S > 20,
otherwise 3072 when S > 16,
otherwise 768.
23.12.6.1 [memory.resource.monotonic.buffer.ctor]
The default next_buffer_size is 128 * sizeof(void*).
The default growth factor is 1.5.
23.15.4.3 [meta.unary.prop]
The predicate condition for
has_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 is
C* and
basic_string_view<C, T>::const_iterator is
const C*.
28.4.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.
29.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.
29.6.9 [c.math.rand]
Whether the rand function may introduce data
races depends on the target C library that provides the function.
29.9.5 [sf.cmath]
The effect of calling the mathematical special functions with large
inputs should be documented here.
30.10.2.1 [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.
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 calling MoveFileExW and so
does not meet the requirements of POSIX rename
when one or both of the paths resolves to an existing directory.
Specifically, it is not possible to rename a directory to replace another
directory (POSIX requires that to work if the directory being
replaced is empty).
Parallelism 2 TS
9.3 [parallel.simd.abi]max_fixed_size<T> is 32, except when targetting
AVX512BW and sizeof(T) is 1.
When targeting 32-bit x86,
simd_abi::compatible<T> is an alias for
simd_abi::scalar.
When targeting 64-bit x86 (including x32) or Aarch64,
simd_abi::compatible<T> is an alias for
simd_abi::_VecBuiltin<16>,
unless T is long double, in which case it is
an alias for simd_abi::scalar.
When targeting ARM (but not Aarch64) with NEON support,
simd_abi::compatible<T> is an alias for
simd_abi::_VecBuiltin<16>,
unless sizeof(T) > 4, in which case it is
an alias for simd_abi::scalar. Additionally,
simd_abi::compatible<float> is an alias for
simd_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 of
simd_abi::scalar,
simd_abi::_VecBuiltin<16>,
simd_abi::_VecBuiltin<32>, or
simd_abi::_VecBltnBtmsk<64>, depending on
T and the machine options the compiler was invoked with.
When targeting ARM/Aarch64 or POWER,
simd_abi::native<T> is an alias for
simd_abi::scalar or
simd_abi::_VecBuiltin<16>, depending on
T and the machine options the compiler was invoked with.
For any other targeted machine
simd_abi::compatible<T> and
simd_abi::native<T> are aliases for
simd_abi::scalar. (subject to change)
The extended ABI tag types defined in the
std::experimental::parallelism_v2::simd_abi namespace are:
simd_abi::_VecBuiltin<Bytes>, and
simd_abi::_VecBltnBtmsk<Bytes>.
simd_abi::deduce<T, N, Abis...>::type,
with N > 1 is an alias for an extended ABI tag, if a
supported extended ABI tag exists. Otherwise it is an alias for
simd_abi::fixed_size<N>. The
simd_abi::_VecBltnBtmsk ABI tag is preferred over
simd_abi::_VecBuiltin.
9.4 [parallel.simd.traits]memory_alignment<T, U>::value is
sizeof(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 and
sizeof(T) <= 4. Additionally,
sizeof(T) == 8 with integral T is supported if
__ARM_ARCH >= 8, and double is supported if
__aarch64__ is defined.
On POWER, simd<T, _VecBuiltin<Bytes>>
is supported if __ALTIVEC__ is defined and sizeof(T)
< 8. Additionally, double is supported if
__VSX__ is defined, and any T with
sizeof(T) <= 8 is supported if __POWER8_VECTOR__
is defined.
On x86, given an extended ABI tag Abi,
simd<T, Abi> is supported according to the
following table:
Table 1.8. Support for Extended ABI Tags
ABI tag Abi
value type T
values for Bytes
required machine option
_VecBuiltin<Bytes>
float
8, 12, 16
"-msse"
20, 24, 28, 32
"-mavx"
double
16
"-msse2"
24, 32
"-mavx"
integral types other than bool
Bytes ≤ 16 and Bytes divisible by
sizeof(T)
"-msse2"
16 < Bytes ≤ 32 and Bytes
divisible by sizeof(T)
"-mavx2"
_VecBuiltin<Bytes> and
_VecBltnBtmsk<Bytes>
vectorizable types with sizeof(T) ≥ 4
32 < Bytes ≤ 64 and Bytes
divisible by sizeof(T)
"-mavx512f"
vectorizable types with sizeof(T) < 4
"-mavx512bw"
_VecBltnBtmsk<Bytes>
vectorizable types with sizeof(T) ≥ 4
Bytes ≤ 32 and Bytes divisible by
sizeof(T)
"-mavx512vl"
vectorizable types with sizeof(T) < 4
"-mavx512bw" and "-mavx512vl"
C++ 2020
In this implementation the -std=gnu++20 or
-std=c++20 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++20 and library TS support in the GCC 12 release series,
not in any particular release.
The following table lists new library features that are included in
the C++20 standard. 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).
A dash (—) in the status column indicates that the changes in the proposal
either 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 from
SD-6:
Feature-testing recommendations for C++ (where applicable)
or any notes about the implementation.
Table 1.9. C++ 2020 Library Features
Library Feature
Proposal
Status
SD-6 Feature Test / Notes
Compile-time programming
Add constexpr modifiers to functions in <algorithm> and <utility> Headers
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.
C++ 2023
In this implementation the -std=gnu++23 or
-std=c++23 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++23 and library TS support in mainline GCC,
not in any particular release.
The following table lists new library features that have been accepted into
the C++23 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).
A dash (—) in the status column indicates that the changes in the proposal
either 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 from
SD-6:
Feature-testing recommendations for C++ (where applicable)
or any notes about the implementation.
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 12 release series,
not in any particular release.
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:2011,
"Extensions for the programming language C++ to support
decimal floating-point arithmetic".
This page describes the TR 24733 support in the GCC 12 release series,
not in any particular release.
Table 1.12. C++ TR 24733 Implementation Status
Section
Description
Status
Comments
0
Introduction
1
Normative references
2
Conventions
3
Decimal floating-point types
3.1
Characteristics of decimal floating-point types
3.2
Decimal Types
3.2.1
Class decimal synopsis
Partial
Missing declarations for formatted input/output; non-conforming extension for functions converting to integral type
3.2.2
Class decimal32
Partial
Missing 3.2.2.5 conversion to integral type; conforming extension for conversion from scalar decimal floating-point
3.2.3
Class decimal64
Partial
Missing 3.2.3.5 conversion to integral type; conforming extension for conversion from scalar decimal floating-point
3.2.4
Class decimal128
Partial
Missing 3.2.4.5 conversion to integral type; conforming extension for conversion from scalar decimal floating-point
3.2.5
Initialization from coefficient and exponent
Y
3.2.6
Conversion to generic floating-point type
Y
3.2.7
Unary arithmetic operators
Y
3.2.8
Binary arithmetic operators
Y
3.2.9
Comparison operators
Y
3.2.10
Formatted input
N
3.2.11
Formatted output
N
3.3
Additions to header limits
N
3.4
Headers cfloat and float.h
3.4.2
Additions to header cfloat synopsis
Y
3.4.3
Additions to header float.h synopsis
N
3.4.4
Maximum finite value
Y
3.4.5
Epsilon
Y
3.4.6
Minimum positive normal value
Y
3.4.7
Minimum positive subnormal value
Y
3.4.8
Evaluation format
Y
3.5
Additions to cfenv and fenv.h
Outside the scope of GCC
3.6
Additions to cmath and math.h
Outside the scope of GCC
3.7
Additions to cstdio and stdio.h
Outside the scope of GCC
3.8
Additions to cstdlib and stdlib.h
Outside the scope of GCC
3.9
Additions to cwchar and wchar.h
Outside the scope of GCC
3.10
Facets
N
3.11
Type traits
N
3.12
Hash functions
N
4
Notes 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 using
at 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 their
respective 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 to 201003L.
In addition to the special functions defined in IS 29124, for
non-strict modes (i.e. -std=gnu++NN modes) the
hypergeometric functions and confluent hypergeometric functions
from TR1 are also provided, defined in namespace
__gnu_cxx.
Table 1.13. C++ Special Functions Implementation Status
Section
Description
Status
Comments
7
Macro names
Partial
No diagnostic for inconsistent definitions of
__STDCPP_WANT_MATH_SPEC_FUNCS__
8
Mathematical special functions
Y
8.1
Additions to header <cmath> synopsis
Y
8.1.1
associated Laguerre polynomials
Y
8.1.2
associated Legendre functions
Y
8.1.3
beta function
Y
8.1.4
(complete) elliptic integral of the first kind
Y
8.1.5
(complete) elliptic integral of the second kind
Y
8.1.6
(complete) elliptic integral of the third kind
Y
8.1.7
regular modified cylindrical Bessel functions
Y
8.1.8
cylindrical Bessel functions (of the first kind)
Y
8.1.9
irregular modified cylindrical Bessel functions
Y
8.1.10
cylindrical Neumann functions
Y
8.1.11
(incomplete) elliptic integral of the first kind
Y
8.1.12
(incomplete) elliptic integral of the second kind
Y
8.1.13
(incomplete) elliptic integral of the third kind
Y
8.1.14
exponential integral
Y
8.1.15
Hermite polynomials
Y
8.1.16
Laguerre polynomials
Y
8.1.17
Legendre polynomials
Y
8.1.18
Riemann zeta function
Y
8.1.19
spherical Bessel functions (of the first kind)
Y
8.1.20
spherical associated Legendre functions
Y
8.1.21
spherical Neumann functions
Y
8.2
Additions to header <math.h>
Y
8.3
The header <ctgmath>
Partial
Conflicts with C++ 2011 requirements.
8.4
The header <tgmath.h>
N
Conflicts with C++ 2011 requirements.
Implementation Specific Behavior
For behaviour which is specified by the 2011 standard,
see C++ 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 with n >= 128 or m >= 128
should be described here.
8.1.2 [sf.cmath.Plm]/3 The effect of calling
these functions with l >= 128 should be described here.
8.1.3 [sf.cmath.I]/3 The effect of calling
these functions with nu >= 128 should be described here.
8.1.8 [sf.cmath.J]/3 The effect of calling
these functions with nu >= 128 should be described here.
8.1.9 [sf.cmath.K]/3 The effect of calling
these functions with nu >= 128 should be described here.
8.1.10 [sf.cmath.N]/3 The effect of calling
these functions with nu >= 128 should be described here.
8.1.15 [sf.cmath.Hn]/3 The effect of calling
these functions with n >= 128 should be described here.
8.1.16 [sf.cmath.Ln]/3 The effect of calling
these functions with n >= 128 should be described here.
8.1.17 [sf.cmath.Pl]/3 The effect of calling
these functions with l >= 128 should be described here.
8.1.19 [sf.cmath.j]/3 The effect of calling
these functions with n >= 128 should be described here.
8.1.20 [sf.cmath.Ylm]/3 The effect of calling
these functions with l >= 128 should be described here.
8.1.21 [sf.cmath.n]/3 The effect of calling
these functions with n >= 128 should be described here.
Enter:
Select:
Useful Commands
Kernel Info:
Php Safe-Mode Bypass (Read Files)
Php Safe-Mode Bypass (List Directories):
Search
Upload
Make Dir
Make File
Go Dir
Go File
--[ x2300 Locus7Shell v. 1.0a beta Modded by #!physx^ | www.LOCUS7S.com | Generation time: 0.006 ]--