ISO C++
1998
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++0x support in mainline GCC SVN, not in any
particular release.
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
here.
[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." As yet we don't
have any allocators which compare non-equal, so we can't describe how
they behave.
[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 chapter 22 notes
for what does exist.
[22.*] Anything and everything we have on locale
implementation will be described
over here.
[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 this chapter.
[27.8.1.4]/16 Calling fstream::sync
when
a get area exists will... whatever fflush()
does, I think.